MYSQL数据库3-DCL/DQL

64 阅读12分钟

*DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

DQL---数据查询语言(select)*

创建表

mysql> create table emp(emp_id int,emp_name char(yint, dpt_id int);
mysql> insert into emp values(1,'robin',30,200);
···················
mysql> insert into emp values(10,'xinghh',43,300)
mysql> select * from emp;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
|      2 | zorro    |      25 |    200 |
|      3 | tom      |      22 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
|      7 | king     |      40 |    300 |
|      8 | jean     |      41 |    300 |
|      9 | natasha  |      42 |    300 |
|     10 | xinghh   |      43 |    300 |
+--------+----------+---------+--------+

排序检索select

mysql> select emp_name,emp_age from emp;   # select xx from x;
+----------+---------+
| emp_name | emp_age |
+----------+---------+
| robin    |      30 |
| zorro    |      25 |
| tom      |      22 |
| jerry    |      31 |
| jack     |      32 |
| rose     |      33 |
| king     |      40 |
| jean     |      41 |
| natasha  |      42 |
| xinghh   |      43 |
+----------+---------+
mysql> select emp_age,emp_name emp_age from emp;  # 检索的过程中重命名
+---------+---------+
| emp_age | emp_age |
+---------+---------+
|      30 | robin   |
|      25 | zorro   |
|      22 | tom     |
|      31 | jerry   |
|      32 | jack    |
|      33 | rose    |
|      40 | king    |
|      41 | jean    |
|      42 | natasha |
|      43 | xinghh  |
+---------+---------+
mysql> select emp_age,emp_name,emp_age as new_age  # 在拥有的原有列添加新的一列并重命名
+---------+----------+---------+
| emp_age | emp_name | new_age |
+---------+----------+---------+
|      30 | robin    |      30 |
|      25 | zorro    |      25 |
|      22 | tom      |      22 |
|      31 | jerry    |      31 |
|      32 | jack     |      32 |
|      33 | rose     |      33 |
|      40 | king     |      40 |
|      41 | jean     |      41 |
|      42 | natasha  |      42 |
|      43 | xinghh   |      43 |
+---------+----------+---------+

distinct 去重

mysql> select dpt_id from emp;
+--------+
| dpt_id |
+--------+
|    200 |
|    200 |
|    200 |
|    100 |
|    100 |
|    100 |
|    300 |
|    300 |
|    300 |
|    300 |
+--------+
mysql> select distinct dpt_id from emp;   # 去重
+--------+
| dpt_id |
+--------+
|    200 |
|    100 |
|    300 |
+--------+

order by 排序

mysql> select emp_name,emp_age from emp order by emp_age;   # 按照 emp_age排序
+----------+---------+
| emp_name | emp_age |
+----------+---------+
| tom      |      22 |
| zorro    |      25 |
| robin    |      30 |
| jerry    |      31 |
| jack     |      32 |
| rose     |      33 |
| king     |      40 |
| jean     |      41 |
| natasha  |      42 |
| xinghh   |      43 |
+----------+---------+
mysql> select emp_name,emp_age from emp order by emp_age desc;  # desc按照emp_age 反向排序
+----------+---------+
| emp_name | emp_age |
+----------+---------+
| xinghh   |      43 |
| natasha  |      42 |
| jean     |      41 |
| king     |      40 |
| rose     |      33 |
| jack     |      32 |
| jerry    |      31 |
| robin    |      30 |
| zorro    |      25 |
| tom      |      22 |
+----------+---------+
mysql> insert into emp values(11,'xingxx',43,300);
mysql> select emp_name,emp_age from emp order by emp_age,emp_name; # 先按emp_age排序emp_age相同再按name排序
+----------+---------+
| emp_name | emp_age |
+----------+---------+
| tom      |      22 |
| zorro    |      25 |
| robin    |      30 |
| jerry    |      31 |
| jack     |      32 |
| rose     |      33 |
| king     |      40 |
| jean     |      41 |
| natasha  |      42 |
| xinghh   |      43 |
| xingxx   |      43 |
+----------+---------+
mysql> select emp_name,emp_age from emp order by emp_age desc,emp_name desc;  先按emp_age反向排序,再按emp_name反向排序
+----------+---------+
| emp_name | emp_age |
+----------+---------+
| xingxx   |      43 |
| xinghh   |      43 |
| natasha  |      42 |
| jean     |      41 |
| king     |      40 |
| rose     |      33 |
| jack     |      32 |
| jerry    |      31 |
| robin    |      30 |
| zorro    |      25 |
| tom      |      22 |
+----------+---------+
mysql> select * from emp order by emp_age;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      3 | tom      |      22 |    200 |
|      2 | zorro    |      25 |    200 |
|      1 | robin    |      30 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
|      7 | king     |      40 |    300 |
|      8 | jean     |      41 |    300 |
|      9 | natasha  |      42 |    300 |
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+

limit 选择行数限制

mysql> select * from emp limit 5;   # 选择前五行
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
|      2 | zorro    |      25 |    200 |
|      3 | tom      |      22 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
+--------+----------+---------+--------+
mysql> select * from emp limit 3,5;   # 选择第三行以后五行
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
|      7 | king     |      40 |    300 |
|      8 | jean     |      41 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp order by emp_age limit 1;  # emp_age 年纪最年轻的
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      3 | tom      |      22 |    200 |
+--------+----------+---------+--------+
mysql> select * from emp order by emp_age desc limit 1;  # 年纪最大的
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+
mysql> select emp_age from emp order by emp_age desc limit 1;
+---------+
| emp_age |
+---------+
|      43 |
+---------+

where子句

mysql> select * from emp where emp_name='zorro';
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      2 | zorro    |      25 |    200 |
+--------+----------+---------+--------+

where 子句操作符
mysql> select * from emp where emp_age>30;  
mysql> select * from emp where emp_age>=30;
mysql> select * from emp where emp_age between 30 and 33;  # 30-33岁之间的
·······
mysql> select * from emp where emp_age!=30;   # 不等于
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      2 | zorro    |      25 |    200 |
|      3 | tom      |      22 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
|      7 | king     |      40 |    300 |
|      8 | jean     |      41 |    300 |
|      9 | natasha  |      42 |    300 |
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_age<>30;  #  <>  不等于
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      2 | zorro    |      25 |    200 |
|      3 | tom      |      22 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
|      7 | king     |      40 |    300 |
|      8 | jean     |      41 |    300 |
|      9 | natasha  |      42 |    300 |
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_age is null;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|     11 | xingnull |    NULL |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_age is not null
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
···
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_age >35 and emp_age<=40;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      7 | king     |      40 |    300 |
+--------+----------+---------+--------+
1 row in set (0.01 sec)mysql> select * from emp where emp_age >35 or emp_age <=40;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
···
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where dpt_id=200 or dpt_id=100 and emp_age>24;  # or操作符表示满足任意条件 或操作
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
|      2 | zorro    |      25 |    200 |
|      3 | tom      |      22 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
+--------+----------+---------+--------+
mysql> select * from emp where (dpt_id=200 or dpt__id=100) and emp_age>24;  # and 优先执行;and操作符表示两个条件都要满足 与操作
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
|      2 | zorro    |      25 |    200 |
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      6 | rose     |      33 |    100 |
+--------+----------+---------+--------+
mysql> select * from emp where dpt_id=100 or dpt_id=200 or dpt_id =300;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
···
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
|     11 | xingnull |    NULL |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where dpt_id in (100,200,300);
1.in的语法更加直观
2.in的计算次序更容易管理(操作符少)
3.in 一般比or执行的更快
4.in的最大优点可以包含其他子句 or不行
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
···
|      9 | natasha  |      42 |    300 |
|     10 | xinghh   |      43 |    300 |
|     11 | xingxx   |      43 |    300 |
|     11 | xingnull |    NULL |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_name like "j%n";   #  通配符%匹配多个字符_匹配一个字符
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      8 | jean     |      41 |    300 |
+--------+----------+---------+--------+
mysql> select * from emp where emp_name like "j_n";
Empty set (0.00 sec)
mysql> select * from emp where emp_name regexp "je*";
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      4 | jerry    |      31 |    100 |
|      5 | jack     |      32 |    100 |
|      8 | jean     |      41 |    300 |
+--------+----------+---------+--------+

计算

mysql> insert into emp values(11,'xingnull',null,300);
mysql> select * from emp;
+--------+----------+---------+--------+
| emp_id | emp_name | emp_age | dpt_id |
+--------+----------+---------+--------+
|      1 | robin    |      30 |    200 |
···
|     11 | xingxx   |      43 |    300 |
|     11 | xingnull |    NULL |    300 |
+--------+----------+---------+--------+
mysql> select emp_age*100*12+5000 from emp;
+---------------------+
| emp_age*100*12+5000 |
+---------------------+
|               41000 |
|               35000 |
····
|               56600 |
|                NULL |
+---------------------+
mysql> select emp_age*100*12+5000 from emp;  # 可以用来计算
+---------------------+
| emp_age*100*12+5000 |
+---------------------+
|               41000 |
····
|               56600 |
|                NULL |
+---------------------+
mysql> select concat(emp_id,emp_name)from emp;
+-------------------------+
| concat(emp_id,emp_name) |
+-------------------------+
| 1robin                  |
····
| 11xingxx                |
| 11xingnull              |
+-------------------------+
mysql> select upper(emp_name) from emp;
+-----------------+
| upper(emp_name) |
+-----------------+
| ROBIN           |
       ····
| XINGNULL        |
+-----------------+
mysql> select lower(upper(emp_name)) from emp;
+------------------------+
| lower(upper(emp_name)) |
+------------------------+
| robin                  |
····
| natasha                |
| xinghh                 |
| xingxx                 |
| xingnull               |
+------------------------+
mysql> select max(emp_age)from emp;
+--------------+
| max(emp_age) |
+--------------+
|           43 |
+--------------+
mysql> select min(emp_age)from emp;
+--------------+
| min(emp_age) |
+--------------+
|           22 |
+--------------+
mysql> select avg(emp_age)from emp;
+--------------+
| avg(emp_age) |
+--------------+
|      34.7273 |
+--------------+
mysql> select sum(emp_age*100*6+299-67)from emp;  # 求和
+---------------------------+
| sum(emp_age*100*6+299-67) |
+---------------------------+
|                    231752 |
+---------------------------+
mysql> select count(*) from emp;
+----------+
| count(*) |
+----------+
|       12 |
+----------+
mysql> select * from t11;
+--------+
| myyear |
+--------+
|   2023 |
|   2023 |
|   1970 |
|   2060 |
|   1999 |
+--------+
mysql> select month(mydt)from t12;
+-------------+
| month(mydt) |
+-------------+
|           8 |
|           8 |
+-------------+
mysql> select day(mydt)from t12;
+-----------+
| day(mydt) |
+-----------+
|        16 |
|        16 |
+-----------+
mysql> select hour(mydt)from t12;
+------------+
| hour(mydt) |
+------------+
|         10 |
|         10 |
+------------+
mysql> select minute(mydt)from t12;
+--------------+
| minute(mydt) |
+--------------+
|           10 |
|           10 |
+--------------+
mysql> select second(mydt)from t12;
+--------------+
| second(mydt) |
+--------------+
|           10 |
|           10 |
+--------------+
mysql> select count(*) from emp group by dpt_id;
+----------+
| count(*) |
+----------+
|        3 |
|        3 |
|        6 |
+----------+
mysql> select count(*)as new from emp group by dpt_id having new>5;
+-----+
| new |
+-----+
|   6 |
+-----+
mysql> select count(*)as new from emp group by dpt_id having new>1;
+-----+
| new |
+-----+
|   3 |
|   3 |
|   6 |
+-----+
mysql>  create table cpu(prod_name char(10),prod_pris int,vender_name char(10),prod_date date);
mysql> insert into  cpu values('cpu1',1200,'inter','2018-10-10');
······
mysql> insert into  cpu values('cpu5',2800,'amd','2018-10-10');
mysql> select * from cpu;
+-----------+-----------+-------------+------------+
| prod_name | prod_pris | vender_name | prod_date  |
+-----------+-----------+-------------+------------+
| cpu1      |      1200 | inter       | 2018-10-10 |
| cpu2      |       800 | amd         | 2017-10-10 |
| cpu3      |      1500 | inter       | 2018-10-10 |
| cpu4      |      1800 | amd         | 2018-10-10 |
| cpu5      |      2800 | amd         | 2018-10-10 |
+-----------+-----------+-------------+------------+
mysql> select max(prod_pris) from cpu;
+----------------+
| max(prod_pris) |
+----------------+
|           2800 |
+----------------+
mysql> select max(prod_pris) from cpu group by vender_name;
+----------------+
| max(prod_pris) |
+----------------+
+----------------+
|           2800 |
|           1500 |
+----------------+
mysql> select prod_name,prod_pris from cpu,(select max(prod_pris) as new_pris from cpu group by vender_name) as new where cpu.prod_pris=new.new_pris;
+-----------+-----------+
| prod_name | prod_pris |
+-----------+-----------+
| cpu3      |      1500 |
| cpu5      |      2800 |
+-----------+-----------+
mysql> select prod_name,prod_pris,vender_name from cpu,(select max(prod_pris) as new_pris from cpu group by vender_name) as new where cpu.prod_pris=new.new_pris;
+-----------+-----------+-------------+
| prod_name | prod_pris | vender_name |
+-----------+-----------+-------------+
| cpu3      |      1500 | inter       |
| cpu5      |      2800 | amd         |
+-----------+-----------+-------------+
mysql> select prod_name,prod_pris,vender_name from cpu,(select max(prod_pris) as new_pris,vender_name as new_name from cpu group by vender_name) as new where cpu.prod_pris=new.new_pris;
+-----------+-----------+-------------+
| prod_name | prod_pris | vender_name |
+-----------+-----------+-------------+
| cpu3      |      1500 | inter       |
| cpu5      |      2800 | amd         |
+-----------+-----------+-------------+

创建一个emp/dpt表

mysql> create table emp(emp_id int,emp_name char(10),emp_age tinyint, dpt_id int);  # 创建表 emp,插入数据
mysql> insert into emp values(1,'robin',30,200);
······
mysql> insert into emp values(9,'natasha',42,300);
mysql> insert into emp values(10,'xinghh',43,300);
mysql> desc emp;
+----------+------------+------+-----+---------+-------+
| Field    | Type       | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| emp_id   | int(11)    | YES  |     | NULL    |       |
| emp_name | char(10)   | YES  |     | NULL    |       |
| emp_age  | tinyint(4) | YES  |     | NULL    |       |
| dpt_id   | int(11)    | YES  |     | NULL    |       |
+----------+------------+------+-----+---------+-------+
mysql> alter table emp add emp_money int;   # add 添加一列内容
mysql> update emp set emp_money=10000 where emp_id=1; 
·····
mysql> update emp set emp_money=90000 where emp_id=9;
mysql> update emp set emp_money=100000 where emp_id=10;
mysql> select * from emp;
+--------+----------+---------+--------+-----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money |
+--------+----------+---------+--------+-----------+
|      1 | robin    |      30 |    200 |     10000 |
|      2 | zorro    |      25 |    200 |     20000 |
|      3 | tom      |      22 |    200 |     30000 |
|      4 | jerry    |      31 |    100 |     40000 |
|      5 | jack     |      32 |    100 |     50000 |
|      6 | rose     |      33 |    100 |     60000 |
|      7 | king     |      40 |    300 |     70000 |
|      8 | jean     |      41 |    300 |     80000 |
|      9 | natasha  |      42 |    300 |     90000 |
|     10 | xinghh   |      43 |    300 |    100000 |
+--------+----------+---------+--------+-----------+

mysql> create table dpt(dpt_id int,dpt_name char(10));   # 创建表  dpt,插入数据
mysql> insert into dpt values(100,'yw');
mysql> insert into dpt values(200,'kf');
······
mysql> insert into dpt values(400,'boss');
mysql> desc dpt;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| dpt_id   | int(11)  | YES  |     | NULL    |       |
| dpt_name | char(10) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
mysql> select * from dpt;
+--------+----------+
| dpt_id | dpt_name |
+--------+----------+
|    100 | yw       |
|    200 | kf       |
|    300 | hr       |
|    400 | boss     |
+--------+----------+


PART1:
mysql> select * from emp,dpt;
+--------+----------+---------+--------+-----------+--------+----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money | dpt_id | dpt_name |
+--------+----------+---------+--------+-----------+--------+----------+
|      1 | robin    |      30 |    200 |     10000 |    100 | yw       |
|      1 | robin    |      30 |    200 |     10000 |    200 | kf       |
|      1 | robin    |      30 |    200 |     10000 |    300 | hr       |
|      1 | robin    |      30 |    200 |     10000 |    400 | boss     |
··········省略
|     10 | xinghh   |      43 |    300 |    100000 |    100 | yw       |
|     10 | xinghh   |      43 |    300 |    100000 |    200 | kf       |
|     10 | xinghh   |      43 |    300 |    100000 |    300 | hr       |
|     10 | xinghh   |      43 |    300 |    100000 |    400 | boss     |
+--------+----------+---------+--------+-----------+--------+----------+
mysql> select * from emp,dpt where emp.dpt_id = dpt.dpt_id;   
+--------+----------+---------+--------+-----------+--------+----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money | dpt_id | dpt_name |
+--------+----------+---------+--------+-----------+--------+----------+
|      1 | robin    |      30 |    200 |     10000 |    200 | kf       |
|      2 | zorro    |      25 |    200 |     20000 |    200 | kf       |
|      3 | tom      |      22 |    200 |     30000 |    200 | kf       |
|      4 | jerry    |      31 |    100 |     40000 |    100 | yw       |
|      5 | jack     |      32 |    100 |     50000 |    100 | yw       |
|      6 | rose     |      33 |    100 |     60000 |    100 | yw       |
|      7 | king     |      40 |    300 |     70000 |    300 | hr       |
|      8 | jean     |      41 |    300 |     80000 |    300 | hr       |
|      9 | natasha  |      42 |    300 |     90000 |    300 | hr       |
|     10 | xinghh   |      43 |    300 |    100000 |    300 | hr       |
+--------+----------+---------+--------+-----------+--------+----------+
mysql> select * from emp left join dpt on emp.dpt_id =dpt.dpt_id;
+--------+----------+---------+--------+-----------+--------+----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money | dpt_id | dpt_name |
+--------+----------+---------+--------+-----------+--------+----------+
|      4 | jerry    |      31 |    100 |     40000 |    100 | yw       |
|      5 | jack     |      32 |    100 |     50000 |    100 | yw       |
|      6 | rose     |      33 |    100 |     60000 |    100 | yw       |
|      1 | robin    |      30 |    200 |     10000 |    200 | kf       |
|      2 | zorro    |      25 |    200 |     20000 |    200 | kf       |
|      3 | tom      |      22 |    200 |     30000 |    200 | kf       |
|      7 | king     |      40 |    300 |     70000 |    300 | hr       |
|      8 | jean     |      41 |    300 |     80000 |    300 | hr       |
|      9 | natasha  |      42 |    300 |     90000 |    300 | hr       |
|     10 | xinghh   |      43 |    300 |    100000 |    300 | hr       |
+--------+----------+---------+--------+-----------+--------+----------+
mysql> select * from emp right join dpt on emp.dpt_id =dpt.dpt_id;
+--------+----------+---------+--------+-----------+--------+----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money | dpt_id | dpt_name |
+--------+----------+---------+--------+-----------+--------+----------+
|      1 | robin    |      30 |    200 |     10000 |    200 | kf       |
|      2 | zorro    |      25 |    200 |     20000 |    200 | kf       |
|      3 | tom      |      22 |    200 |     30000 |    200 | kf       |
|      4 | jerry    |      31 |    100 |     40000 |    100 | yw       |
|      5 | jack     |      32 |    100 |     50000 |    100 | yw       |
|      6 | rose     |      33 |    100 |     60000 |    100 | yw       |
|      7 | king     |      40 |    300 |     70000 |    300 | hr       |
|      8 | jean     |      41 |    300 |     80000 |    300 | hr       |
|      9 | natasha  |      42 |    300 |     90000 |    300 | hr       |
|     10 | xinghh   |      43 |    300 |    100000 |    300 | hr       |
|   NULL | NULL     |    NULL |   NULL |      NULL |    400 | boss     |
+--------+----------+---------+--------+-----------+--------+----------+
mysql> select * from dpt left join emp on emp.dpt_id=dpt.dpt_id;
+--------+----------+--------+----------+---------+--------+-----------+
| dpt_id | dpt_name | emp_id | emp_name | emp_age | dpt_id | emp_money |
+--------+----------+--------+----------+---------+--------+-----------+
|    200 | kf       |      1 | robin    |      30 |    200 |     10000 |
|    200 | kf       |      2 | zorro    |      25 |    200 |     20000 |
|    200 | kf       |      3 | tom      |      22 |    200 |     30000 |
|    100 | yw       |      4 | jerry    |      31 |    100 |     40000 |
|    100 | yw       |      5 | jack     |      32 |    100 |     50000 |
|    100 | yw       |      6 | rose     |      33 |    100 |     60000 |
|    300 | hr       |      7 | king     |      40 |    300 |     70000 |
|    300 | hr       |      8 | jean     |      41 |    300 |     80000 |
|    300 | hr       |      9 | natasha  |      42 |    300 |     90000 |
|    300 | hr       |     10 | xinghh   |      43 |    300 |    100000 |
|    400 | boss     |   NULL | NULL     |    NULL |   NULL |      NULL |
+--------+----------+--------+----------+---------+--------+-----------+

PART2:
mysql> select * from emp where emp_money=(select emp_money from emp order by emp_money desc limit 1);
+--------+----------+---------+--------+-----------+
| emp_id | emp_name | emp_age | dpt_id | emp_money |
+--------+----------+---------+--------+-----------+
|     10 | xinghh   |      43 |    300 |    100000 |
+--------+----------+---------+--------+-----------+
mysql> select max(emp_money) from emp;
+----------------+
| max(emp_money) |
+----------------+
|         100000 |
+----------------+
mysql> select max(emp_money) from emp group by dpt_id;
+----------------+
| max(emp_money) |
+----------------+
|          60000 |
|          30000 |
|         100000 |
+----------------+
mysql> select emp_name,emp_money from emp,(select max(emp_money) as new_money from emp group by dpt_id) as new where emp.emp_money =new.new_money;
+----------+-----------+
| emp_name | emp_money |
+----------+-----------+
| tom      |     30000 |
| rose     |     60000 |
| xinghh   |    100000 |
+----------+-----------+

存储引擎:show engines\G

研究大量的临时数据,也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据
mysql> show engines\G
*************************** 1. row ***************************
      Engine: InnoDB
*************************** 2. row ***************************
      Engine: MRG_MYISAM
*************************** 3. row ***************************
      Engine: MEMORY
*************************** 4. row ***************************
      Engine: BLACKHOLE
*************************** 5. row ***************************
      Engine: MyISAM
*************************** 6. row ***************************
      Engine: CSV
*************************** 7. row ***************************
      Engine: ARCHIVE
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
*************************** 9. row ***************************
      Engine: FEDERATED

#### MEMORY引擎
mysql> create table myt1(id int,name char(10)) engine=memory;  #创建memory引擎表
mysql> insert into myt1 values(1,'haxi');
mysql> select * from myt1;
+------+------+
| id   | name |
+------+------+
|    1 | haxi |
+------+------+


#### BLACKHOLE 引擎
mysql> create table myt2(id int,name char(10)) engine=blackhole;  #BLACKHOLE引擎
mysql> insert into myt2 values (1,'aria');
mysql> select * from myt2;
Empty set (0.00 sec)


#### CSV 引擎
mysql> create table myt3(id int,name char(10)) engine=CSV;

#### MyISAM 引擎
mysql> create table myt4(id int,name char(10)) engine=myisam;   # MyISAM引擎,创建基表myt4
mysql> show create table myt4;
+-------+------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                           |
+-------+------------------------------------------------------------------------------------------------------------------------+
| myt4  | CREATE TABLE `myt4` (
  `id` int(11) DEFAULT NULL,
  `name` char(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------+

#### MRG_MYISAM 引擎
mysql> use ascd;
Database changed
mysql> create table t1(id int,name char(10)) engine=myisam;
mysql> create table t2(id int,name char(10)) engine=myisam;
mysql> insert into t1 values(1,'xixi');
mysql> insert into t2 values(2,'haha');

mysql> create table untab(id int,name char(10)) union=(t1,t2) engine=mrg_myisam;    # MRG表指定插入表
mysql> select * from untab;
+------+------+
| id   | name |
+------+------+
|    1 | xixi |
|    2 | haha |
+------+------+
[root@localhost data]# cd ascd/
[root@localhost ascd]# ls
db.opt  t1.MYD  t2.frm  t2.MYI     untab.MRG
t1.frm  t1.MYI  t2.MYD  untab.frm

mysql> update untab set id=100 where id=2;   # 更新id
mysql> select * from untab;
+------+------+
| id   | name |
+------+------+
|    1 | xixi |
|  100 | haha |
+------+------+
mysql> drop table untab;

mysql> create table untab(id int,name char(10)) union=(t1,t2) insert_method=last engine=mrg_myisam;   # insert_method=last
mysql> select * from untab;
+------+------+
| id   | name |
+------+------+
|    1 | xixi |
|  100 | haha |
+------+------+
mysql> insert into untab values(20,'jack');
mysql> select * from untab;
+------+------+
| id   | name |
+------+------+
|    1 | xixi |
|  100 | haha |
|   20 | jack |
+------+------+


[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data]# mkdir xxx   # 创建的文件,但是在MySQL中并不能使用
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ascd               |
| hahaha             |
| mysql              |
| performance_schema |
| sys                |
| xxx                |
+--------------------+
mysql> use xxx;
Database changed
mysql> create table t1(id int);
ERROR 1005 (HY000): Can't create table 't1' (errno: 13)

[root@localhost data]# rm -rf xxx
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ascd               |
| hahaha             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+