MySQL的單表和多表查詢

我們在前面曾構建過三個用于實驗的表格,下面將基于這三個表進行實踐。

# 建立一個用于實驗的三個表格
mysql> create table emp (->   empno varchar(10),->   ename varchar(50),->   job varchar(50),->   mgr int,->   hiredate timestamp,->   sal decimal(10, 2),->   comm decimal(10, 2),->   deptno int-> );
Query OK, 0 rows affected (0.03 sec)mysql> insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values-> ('007369', 'smith', 'clerk', 7902, '1980-12-17 00:00:00', 800.00, null, 20),-> ('007499', 'allen', 'salesman', 7698, '1981-02-20 00:00:00', 1600.00, 300.00, 30),-> ('007521', 'ward', 'salesman', 7698, '1981-02-22 00:00:00', 1250.00, 500.00, 30),-> ('007566', 'jones', 'manager', 7839, '1981-04-02 00:00:00', 2975.00, null, 20),-> ('007654', 'martin', 'salesman', 7698, '1981-09-28 00:00:00', 1250.00, 1400.00, 30),-> ('007698', 'blake', 'manager', 7839, '1981-05-01 00:00:00', 2850.00, null, 30),-> ('007782', 'clark', 'manager', 7839, '1981-06-09 00:00:00', 2450.00, null, 10),-> ('007788', 'scott', 'analyst', 7566, '1987-04-19 00:00:00', 3000.00, null, 20),-> ('007839', 'king', 'president', null, '1981-11-17 00:00:00', 5000.00, null, 10),-> ('007844', 'turner', 'salesman', 7698, '1981-09-08 00:00:00', 1500.00, 0.00, 30),-> ('007876', 'adams', 'clerk', 7788, '1987-05-23 00:00:00', 1100.00, null, 20),-> ('007900', 'james', 'clerk', 7698, '1981-12-03 00:00:00', 950.00, null, 30),-> ('007902', 'ford', 'analyst', 7566, '1981-12-03 00:00:00', 3000.00, null, 20),-> ('007934', 'miller', 'clerk', 7782, '1982-01-23 00:00:00', 1300.00, null, 10);
Query OK, 14 rows affected (0.01 sec)
Records: 14  Duplicates: 0  Warnings: 0mysql> create table dept (->   deptno int,->   dname varchar(50),->   loc varchar(50)-> );
Query OK, 0 rows affected (0.03 sec)mysql> insert into dept (deptno, dname, loc) values-> (10, 'accounting', 'new york'),-> (20, 'research', 'dallas'),-> (30, 'sales', 'chicago'),-> (40, 'operations', 'boston');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> create table salgrade (->   grade int,->   losal int,->   hisal int-> );
Query OK, 0 rows affected (0.03 sec)mysql> insert into salgrade (grade, losal, hisal) values-> (1, 700, 1200),-> (2, 1201, 1400),-> (3, 1401, 2000),-> (4, 2001, 3000),-> (5, 3001, 9999);
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0mysql> select * from emp;
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
| 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
| 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
| 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
| 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
| 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
| 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
| 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
| 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
| 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
| 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
| 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
| 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
| 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
14 rows in set (0.00 sec)mysql> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | accounting | new york |
|     20 | research   | dallas   |
|     30 | sales      | chicago  |
|     40 | operations | boston   |
+--------+------------+----------+
4 rows in set (0.00 sec)mysql> select * from salgrade;
+-------+-------+-------+
| grade | losal | hisal |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)

還需要使得表之間有聯系。

# 關聯表格
# 設置主鍵
mysql> alter table dept modify column deptno int not null, add primary key (deptno);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0# 添加外鍵
mysql> alter table emp add foreign key (deptno) references dept(deptno);
Query OK, 14 rows affected (0.08 sec)
Records: 14  Duplicates: 0  Warnings: 0# 查看設置
mysql> desc emp;
+----------+---------------+------+-----+-------------------+-----------------------------+
| Field    | Type          | Null | Key | Default           | Extra                       |
+----------+---------------+------+-----+-------------------+-----------------------------+
| empno    | varchar(10)   | YES  |     | NULL              |                             |
| ename    | varchar(50)   | YES  |     | NULL              |                             |
| job      | varchar(50)   | YES  |     | NULL              |                             |
| mgr      | int(11)       | YES  |     | NULL              |                             |
| hiredate | timestamp     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| sal      | decimal(10,2) | YES  |     | NULL              |                             |
| comm     | decimal(10,2) | YES  |     | NULL              |                             |
| deptno   | int(11)       | YES  | MUL | NULL              |                             |
+----------+---------------+------+-----+-------------------+-----------------------------+
8 rows in set (0.00 sec)mysql> desc dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | NO   | PRI | NULL    |       |
| dname  | varchar(50) | YES  |     | NULL    |       |
| loc    | varchar(50) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

1.單表查詢

  1. 查詢工資高于 1000 或崗位為 manager 的雇員,同時還要滿足他們的姓名首字母為 j

    # 需求 1
    mysql> select * from emp where ((sal>1000 or job='manager') and left(ename, 1)='j');
    +--------+-------+---------+------+---------------------+---------+------+--------+
    | empno  | ename | job     | mgr  | hiredate            | sal     | comm | deptno |
    +--------+-------+---------+------+---------------------+---------+------+--------+
    | 007566 | jones | manager | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL |     20 |
    +--------+-------+---------+------+---------------------+---------+------+--------+
    1 row in set (0.00 sec)select * from EMP where (sal>500 or job='MANAGER') and ename like 'J%';
    mysql> select * from emp where (sal>1000 or job='manager') and ename like 'J%';;
    +--------+-------+---------+------+---------------------+---------+------+--------+
    | empno  | ename | job     | mgr  | hiredate            | sal     | comm | deptno |
    +--------+-------+---------+------+---------------------+---------+------+--------+
    | 007566 | jones | manager | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL |     20 |
    +--------+-------+---------+------+---------------------+---------+------+--------+
    1 row in set (0.00 sec)
    
  2. 按照部門號升序、雇員的工資降序來排序

    # 需求 2
    mysql> select sal, deptno, ename from emp order by deptno asc, sal desc;
    +---------+--------+--------+
    | sal     | deptno | ename  |
    +---------+--------+--------+
    | 5000.00 |     10 | king   |
    | 2450.00 |     10 | clark  |
    | 1300.00 |     10 | miller |
    | 3000.00 |     20 | scott  |
    | 3000.00 |     20 | ford   |
    | 2975.00 |     20 | jones  |
    | 1100.00 |     20 | adams  |
    |  800.00 |     20 | smith  |
    | 2850.00 |     30 | blake  |
    | 1600.00 |     30 | allen  |
    | 1500.00 |     30 | turner |
    | 1250.00 |     30 | ward   |
    | 1250.00 |     30 | martin |
    |  950.00 |     30 | james  |
    +---------+--------+--------+
    14 rows in set (0.00 sec)
    
  3. 使用年薪(年薪=月薪*12+獎金)進行降序排序

    # 需求 3
    mysql> select ename, sal*12+ifnull(comm,0) as 年薪 from emp order by '年薪' desc;
    +--------+----------+
    | ename  | 年薪     |
    +--------+----------+
    | smith  |  9600.00 |
    | allen  | 19500.00 |
    | ward   | 15500.00 |
    | jones  | 35700.00 |
    | martin | 16400.00 |
    | blake  | 34200.00 |
    | clark  | 29400.00 |
    | scott  | 36000.00 |
    | king   | 60000.00 |
    | turner | 18000.00 |
    | adams  | 13200.00 |
    | james  | 11400.00 |
    | ford   | 36000.00 |
    | miller | 15600.00 |
    +--------+----------+
    14 rows in set (0.00 sec)
    
  4. 顯示工資最高的員工的名字和工作崗位

    # 需求 4
    mysql> select max(sal) from emp;
    +----------+
    | max(sal) |
    +----------+
    |  5000.00 |
    +----------+
    1 row in set (0.00 sec)mysql> select ename, job from emp where sal=5000;
    +-------+-----------+
    | ename | job       |
    +-------+-----------+
    | king  | president |
    +-------+-----------+
    1 row in set (0.00 sec)mysql> select ename, job from emp where sal=(select max(sal) from emp); # 復合查找,也叫“查找子句”
    +-------+-----------+
    | ename | job       |
    +-------+-----------+
    | king  | president |
    +-------+-----------+
    1 row in set (0.01 sec)
    
  5. 顯示工資高于平均工資的員工信息

    # 需求 5
    mysql> select * from emp where sal > (select avg(sal) from emp);
    +--------+-------+-----------+------+---------------------+---------+------+--------+
    | empno  | ename | job       | mgr  | hiredate            | sal     | comm | deptno |
    +--------+-------+-----------+------+---------------------+---------+------+--------+
    | 007566 | jones | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL |     20 |
    | 007698 | blake | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 | NULL |     30 |
    | 007782 | clark | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 | NULL |     10 |
    | 007788 | scott | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 | NULL |     20 |
    | 007839 | king  | president | NULL | 1981-11-17 00:00:00 | 5000.00 | NULL |     10 |
    | 007902 | ford  | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 | NULL |     20 |
    +--------+-------+-----------+------+---------------------+---------+------+--------+
    6 rows in set (0.00 sec)
    
  6. 顯示每個部門的平均工資和最高工資

    # 需求 6
    mysql> select deptno, avg(sal), max(sal) from emp group by deptno;
    +--------+-------------+----------+
    | deptno | avg(sal)    | max(sal) |
    +--------+-------------+----------+
    |     10 | 2916.666667 |  5000.00 |
    |     20 | 2175.000000 |  3000.00 |
    |     30 | 1566.666667 |  2850.00 |
    +--------+-------------+----------+
    3 rows in set (0.00 sec)
    
  7. 顯示平均工資低于 2000 的部門號和它的平均工資

    # 需求 7
    mysql> select deptno, avg(sal) 平均工資 from emp group by deptno having 平均工資<2000;
    +--------+--------------+
    | deptno | 平均工資     |
    +--------+--------------+
    |     30 |  1566.666667 |
    +--------+--------------+
    1 row in set (0.01 sec)
    
  8. 顯示每種崗位的雇員總數,平均工資

    # 需求 8
    mysql> select job, format(avg(sal), 2) 平均工資, count(*) 人數 from emp group by job;
    +-----------+--------------+--------+
    | job       | 平均工資     | 人數   |
    +-----------+--------------+--------+
    | analyst   | 3,000.00     |      2 |
    | clerk     | 1,037.50     |      4 |
    | manager   | 2,758.33     |      3 |
    | president | 5,000.00     |      1 |
    | salesman  | 1,400.00     |      4 |
    +-----------+--------------+--------+
    5 rows in set (0.00 sec)
    

2.多表查詢

  1. 顯示雇員名、雇員工資以及所在部門的名字

    # 需求 1
    # 將表合外表整合為一個表
    mysql> select * from emp, dept where emp.deptno=dept.deptno;
    +--------+--------+-----------+------+---------------------+---------+---------+--------+--------+------------+----------+
    | empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno | deptno | dname      | loc      |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+--------+------------+----------+
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     10 | accounting | new york |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     10 | accounting | new york |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     10 | accounting | new york |
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     20 | research   | dallas   |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     20 | research   | dallas   |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     20 | research   | dallas   |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     20 | research   | dallas   |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     20 | research   | dallas   |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     30 | sales      | chicago  |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     30 | sales      | chicago  |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     30 | sales      | chicago  |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     30 | sales      | chicago  |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     30 | sales      | chicago  |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     30 | sales      | chicago  |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+--------+------------+----------+
    14 rows in set (0.00 sec)mysql> select emp.ename sal dname from emp, dept where emp.deptno=dept.deptno;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dname from emp, dept where emp.deptno=dept.deptno' at line 1
    mysql> select emp.ename sal, dname, from emp, dept where emp.deptno=dept.deptno;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from emp, dept where emp.deptno=dept.deptno' at line 1
    mysql> select emp.ename, sal, dname from emp, dept where emp.deptno=dept.deptno;
    +--------+---------+------------+
    | ename  | sal     | dname      |
    +--------+---------+------------+
    | clark  | 2450.00 | accounting |
    | king   | 5000.00 | accounting |
    | miller | 1300.00 | accounting |
    | smith  |  800.00 | research   |
    | jones  | 2975.00 | research   |
    | scott  | 3000.00 | research   |
    | adams  | 1100.00 | research   |
    | ford   | 3000.00 | research   |
    | allen  | 1600.00 | sales      |
    | ward   | 1250.00 | sales      |
    | martin | 1250.00 | sales      |
    | blake  | 2850.00 | sales      |
    | turner | 1500.00 | sales      |
    | james  |  950.00 | sales      |
    +--------+---------+------------+
    14 rows in set (0.00 sec)
    
  2. 顯示部門號為 10 的部門名,員工名和工資

    # 需求 2
    mysql> select dept.dname ,emp.ename, emp.sal from emp, dept where emp.deptno=dept.deptno and emp.deptno=10;
    +------------+--------+---------+
    | dname      | ename  | sal     |
    +------------+--------+---------+
    | accounting | clark  | 2450.00 |
    | accounting | king   | 5000.00 |
    | accounting | miller | 1300.00 |
    +------------+--------+---------+
    3 rows in set (0.00 sec)
    
  3. 顯示各個員工的姓名,工資,及工資級別

    # 需求 3
    # (1)查看工資等級
    mysql> select * from salgrade;
    +-------+-------+-------+
    | grade | losal | hisal |
    +-------+-------+-------+
    |     1 |   700 |  1200 |
    |     2 |  1201 |  1400 |
    |     3 |  1401 |  2000 |
    |     4 |  2001 |  3000 |
    |     5 |  3001 |  9999 |
    +-------+-------+-------+
    5 rows in set (0.00 sec)# (2)查看員工信息表
    mysql> select * from emp;
    +--------+--------+-----------+------+---------------------+---------+---------+--------+
    | empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+
    14 rows in set (0.00 sec)# (3)整合兩表(求笛卡爾積)
    mysql> select * from emp, salgrade;
    +--------+--------+-----------+------+---------------------+---------+---------+--------+-------+-------+-------+
    | empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno | grade | losal | hisal |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+-------+-------+-------+
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     1 |   700 |  1200 |
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     2 |  1201 |  1400 |
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     3 |  1401 |  2000 |
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     4 |  2001 |  3000 |
    | 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |     5 |  3001 |  9999 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     1 |   700 |  1200 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     2 |  1201 |  1400 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     3 |  1401 |  2000 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     4 |  2001 |  3000 |
    | 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |     5 |  3001 |  9999 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     1 |   700 |  1200 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     2 |  1201 |  1400 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     3 |  1401 |  2000 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     4 |  2001 |  3000 |
    | 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |     5 |  3001 |  9999 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     1 |   700 |  1200 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     2 |  1201 |  1400 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     3 |  1401 |  2000 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     4 |  2001 |  3000 |
    | 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |     5 |  3001 |  9999 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     1 |   700 |  1200 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     2 |  1201 |  1400 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     3 |  1401 |  2000 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     4 |  2001 |  3000 |
    | 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |     5 |  3001 |  9999 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     1 |   700 |  1200 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     2 |  1201 |  1400 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     3 |  1401 |  2000 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     4 |  2001 |  3000 |
    | 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |     5 |  3001 |  9999 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     1 |   700 |  1200 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     2 |  1201 |  1400 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     3 |  1401 |  2000 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     4 |  2001 |  3000 |
    | 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |     5 |  3001 |  9999 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     1 |   700 |  1200 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     2 |  1201 |  1400 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     3 |  1401 |  2000 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     4 |  2001 |  3000 |
    | 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |     5 |  3001 |  9999 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     1 |   700 |  1200 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     2 |  1201 |  1400 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     3 |  1401 |  2000 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     4 |  2001 |  3000 |
    | 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |     5 |  3001 |  9999 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     1 |   700 |  1200 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     2 |  1201 |  1400 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     3 |  1401 |  2000 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     4 |  2001 |  3000 |
    | 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |     5 |  3001 |  9999 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     1 |   700 |  1200 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     2 |  1201 |  1400 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     3 |  1401 |  2000 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     4 |  2001 |  3000 |
    | 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |     5 |  3001 |  9999 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     1 |   700 |  1200 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     2 |  1201 |  1400 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     3 |  1401 |  2000 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     4 |  2001 |  3000 |
    | 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |     5 |  3001 |  9999 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     1 |   700 |  1200 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     2 |  1201 |  1400 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     3 |  1401 |  2000 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     4 |  2001 |  3000 |
    | 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |     5 |  3001 |  9999 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     1 |   700 |  1200 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     2 |  1201 |  1400 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     3 |  1401 |  2000 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     4 |  2001 |  3000 |
    | 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |     5 |  3001 |  9999 |
    +--------+--------+-----------+------+---------------------+---------+---------+--------+-------+-------+-------+
    70 rows in set (0.00 sec)# (4)列出員工姓名、員工工資、工資對應等級
    mysql> select emp.ename, emp.sal, salgrade.grade from emp, salgrade where sal between salgrade.losal and salgrade.hisal;
    +--------+---------+-------+
    | ename  | sal     | grade |
    +--------+---------+-------+
    | smith  |  800.00 |     1 |
    | allen  | 1600.00 |     3 |
    | ward   | 1250.00 |     2 |
    | jones  | 2975.00 |     4 |
    | martin | 1250.00 |     2 |
    | blake  | 2850.00 |     4 |
    | clark  | 2450.00 |     4 |
    | scott  | 3000.00 |     4 |
    | king   | 5000.00 |     5 |
    | turner | 1500.00 |     3 |
    | adams  | 1100.00 |     1 |
    | james  |  950.00 |     1 |
    | ford   | 3000.00 |     4 |
    | miller | 1300.00 |     2 |
    +--------+---------+-------+
    14 rows in set (0.00 sec)
    

補充:同一張表也可以進行笛卡爾積,也就是“自連接”

# 嘗試自連接
mysql> select * from salgrade as t1, salgrade as t2;
+-------+-------+-------+-------+-------+-------+
| grade | losal | hisal | grade | losal | hisal |
+-------+-------+-------+-------+-------+-------+
|     1 |   700 |  1200 |     1 |   700 |  1200 |
|     2 |  1201 |  1400 |     1 |   700 |  1200 |
|     3 |  1401 |  2000 |     1 |   700 |  1200 |
|     4 |  2001 |  3000 |     1 |   700 |  1200 |
|     5 |  3001 |  9999 |     1 |   700 |  1200 |
|     1 |   700 |  1200 |     2 |  1201 |  1400 |
|     2 |  1201 |  1400 |     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |     2 |  1201 |  1400 |
|     4 |  2001 |  3000 |     2 |  1201 |  1400 |
|     5 |  3001 |  9999 |     2 |  1201 |  1400 |
|     1 |   700 |  1200 |     3 |  1401 |  2000 |
|     2 |  1201 |  1400 |     3 |  1401 |  2000 |
|     3 |  1401 |  2000 |     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |     3 |  1401 |  2000 |
|     5 |  3001 |  9999 |     3 |  1401 |  2000 |
|     1 |   700 |  1200 |     4 |  2001 |  3000 |
|     2 |  1201 |  1400 |     4 |  2001 |  3000 |
|     3 |  1401 |  2000 |     4 |  2001 |  3000 |
|     4 |  2001 |  3000 |     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |     4 |  2001 |  3000 |
|     1 |   700 |  1200 |     5 |  3001 |  9999 |
|     2 |  1201 |  1400 |     5 |  3001 |  9999 |
|     3 |  1401 |  2000 |     5 |  3001 |  9999 |
|     4 |  2001 |  3000 |     5 |  3001 |  9999 |
|     5 |  3001 |  9999 |     5 |  3001 |  9999 |
+-------+-------+-------+-------+-------+-------+
25 rows in set (0.00 sec)mysql> select * from salgrade;
+-------+-------+-------+
| grade | losal | hisal |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)

有些情況下是需要自連接的,例如“顯示員工 ford 的上級領導的編號和姓名”:

# 嘗試尋找上級領導
# (1)查看員工表
mysql> select * from emp;
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| 007369 | smith  | clerk     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
| 007499 | allen  | salesman  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
| 007521 | ward   | salesman  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
| 007566 | jones  | manager   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
| 007654 | martin | salesman  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
| 007698 | blake  | manager   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
| 007782 | clark  | manager   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
| 007788 | scott  | analyst   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
| 007839 | king   | president | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
| 007844 | turner | salesman  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
| 007876 | adams  | clerk     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
| 007900 | james  | clerk     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
| 007902 | ford   | analyst   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
| 007934 | miller | clerk     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
14 rows in set (0.00 sec)# (2)查看某個員工的上級領導編號
mysql> select mgr from emp where ename='ford';
+------+
| mgr  |
+------+
| 7566 |
+------+
1 row in set (0.00 sec)# (3)查看領導編號對應的領導姓名
mysql> select ename, empno from emp where empno=7566;
+-------+--------+
| ename | empno  |
+-------+--------+
| jones | 007566 |
+-------+--------+
1 row in set (0.00 sec)# (4)子查詢做法
mysql> select ename, empno from emp where empno=(select mgr from emp where ename='ford');
+-------+--------+
| ename | empno  |
+-------+--------+
| jones | 007566 |
+-------+--------+
1 row in set (0.01 sec)# (5)自連接做法
mysql> select e2.empno 領導編號, e2.ename 領導名  from emp as e1, emp as e2 where e1.ename='ford' and e1.mgr=e2.empno;
+--------------+-----------+
| 領導編號     | 領導名    |
+--------------+-----------+
| 007566       | jones     |
+--------------+-----------+
1 row in set (0.00 sec)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716270.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課程表系列(BFS)

廣度優先搜索 文章目錄 廣度優先搜索207. 課程表210. 課程表 II思路 630. 課程表 III1462. 課程表 IV547. 省份數量 207. 課程表 207. 課程表 你這個學期必須選修 numCourses 門課程&#xff0c;記為 0 到 numCourses - 1 。 在選修某些課程之前需要一些先修課程。 先修課程…

c++11 標準模板(STL)(std::tuple)(三)

定義于頭文件 <tuple> template< class... Types > class tuple; (C11 起) 類模板 std::tuple 是固定大小的異類值匯集。它是 std::pair 的推廣。 若 (std::is_trivially_destructible_v<Types> && ...) 為 true &#xff0c;則 tuple 的析構函數是…

【AI繪畫】免費GPU Tesla A100 32G算力部署Stable Diffusion

免責聲明 在閱讀和實踐本文提供的內容之前&#xff0c;請注意以下免責聲明&#xff1a; 侵權問題: 本文提供的信息僅供學習參考&#xff0c;不用做任何商業用途&#xff0c;如造成侵權&#xff0c;請私信我&#xff0c;我會立即刪除&#xff0c;作者不對讀者因使用本文所述方法…

Matlab 機器人工具箱 RobotArm類

文章目錄 1 RobotArm1.1 方法1.2 注意2 RobotArm.RobotArm3 RobotArm.cmove4 其他官網:Robotics Toolbox - Peter Corke 1 RobotArm 串聯機械臂類 1.1 方法 方法描述plot顯示機器人的圖形表示teach驅動物理和圖形機器人mirror使用機器人作為從機來驅動圖形</

深入了解Kafka的文件存儲原理

Kafka簡介 Kafka最初由Linkedin公司開發的分布式、分區的、多副本的、多訂閱者的消息系統。它提供了類似于JMS的特性&#xff0c;但是在設計實現上完全不同&#xff0c;此外它并不是JMS規范的實現。kafka對消息保存是根據Topic進行歸類&#xff0c;發送消息者稱為Producer&…

IntelliJ IDEA 常用的插件

IntelliJ IDEA有很多常用的插件&#xff0c;這些插件可以擴展IDE的功能&#xff0c;提高開發效率。以下是一些常用的插件&#xff1a; Maven Helper&#xff1a;這是一款分析Maven依賴沖突的插件。在沒有此插件時&#xff0c;查看Maven的依賴樹和檢查依賴包沖突可能需要輸入命…

梯度下降算法(帶你 原理 實踐)

目錄 一、引言 二、梯度下降算法的原理 三、梯度下降算法的實現 四、梯度下降算法的優缺點 優點&#xff1a; 缺點&#xff1a; 五、梯度下降算法的改進策略 1 隨機梯度下降&#xff08;Stochastic Gradient Descent, SGD&#xff09; 2 批量梯度下降&#xff08;Batch…

LLM分布式訓練第一課(通訊原語)

這個系列作為TFLOPS和顯存消耗的續篇,今天開始正式連載 上一部地址: LLM 參數,顯存,Tflops? 訓練篇(5) (qq.com) 前一篇文章舉了65B模型的訓練所消耗的顯存的案例,如果把條件降低一點,我們看一下7B的模型需要多少顯存? 2byte的模型靜態參數權重(以16bit存儲) = 1…

(一)Python數據分析體系--九五小龐

課程地址&#xff1a;https://space.bilibili.com/387143299/channel/collectiondetail?sid554734 主要內容 知識體系 分析什么樣的數據 為什么使用Python做數據分析 Python近幾年的發展勢頭是有目共睹的&#xff0c;尤其是在科學計算&#xff0c;數據處理&#xff0c;A方面…

駕辰龍跨Llama持Wasm,玩轉Yi模型迎新春

今年新年很特別&#xff0c;AI工具添光彩。今天就來感受下最新的AI神器天選組合“WasmEdgeYi-34B”&#xff0c;只要短短三步&#xff0c;為這個甲辰龍年帶來一份九紫離火運的科技感。 環境準備 這次用的算力是OpenBayes提供的英偉達RTX_4090*1、24GB顯存、20核CPU、80GB內存…

產品營銷展示型wordpress外貿網站模板

工藝品wordpress外貿主題 簡約大氣的wordpress外貿主題&#xff0c;適合做工藝品進出品外貿的公司官網使用。 https://www.jianzhanpress.com/?p5377 餐飲設備wordpress外貿主題 簡潔的wordpress外貿主題&#xff0c;適合食品機械、餐飲設備公司使用。 https://www.jianzh…

Linux 開發工具vim、gcc/g++、makefile

目錄 Linux編輯器-vim 1. 基本概念 2. 基本操作 3. 正常模式命令集 4. 末行模式命令集 5. 其他操作 6. 簡單vim配置 Linux編譯器-gcc/g 1、基本概念 2、程序翻譯的過程 3. gcc如何完成程序翻譯 4、動靜態庫 Linux項目自動化構建工具-make/Makefile 1、背景 2、…

【Qt學習筆記】(四)Qt窗口

Qt窗口 1 菜單欄1.1 創建菜單欄1.2 在菜單欄中添加菜單1.3 創建菜單項1.4 在菜單項之間添加分割線1.5 給菜單項添加槽函數1.6 給菜單項添加快捷鍵 2 工具欄2.1 創建工具欄2.2 設置停靠位置2.3 設置浮動屬性2.4 設置移動屬性2.5 添加 Action 3 狀態欄3.1 狀態欄的創建3.2 在狀態…

2024最新算法:冠豪豬優化算法(CPO)求解23個基準函數

一、冠豪豬優化算法 冠豪豬優化算法(Crested Porcupine Optimizer&#xff0c;CPO)由Mohamed Abdel-Basset等人于2024年提出&#xff0c;該算法模擬冠豪豬的四種不同保護機制&#xff1a;視覺、聽覺、氣味和物理攻擊。第一和第二防御技術&#xff08;視覺和聽覺&#xff09;反…

盤點 | IT行業哪些認證含金量高

微思網絡 廈門微思網絡 作為一名IT人員&#xff0c;誰沒考幾個證 ——值得考的證書擁有的特性 ? 獲政府、企業和從業者認可&#xff1b; ? 持證人數多&#xff0c;業內共識度高&#xff1b; ? 幫持證者加分&#xff0c;快速提薪。 系統網絡方向認證 01 華為認證 華為…

設計模式學習筆記 - 設計原則 - 7.DRY 原則及提高代碼復用性

前言 DRY 原則&#xff0c;英文描述為&#xff1a; Don’t Repeat Yourself。中文直譯&#xff1a;不要重復自己。將它應用在編程中&#xff0c;可理解為&#xff1a;不要寫重讀的代碼。 可能你認為&#xff0c;這個原則很簡單。只要兩段代碼長得一樣&#xff0c;那就是違反 …

【機器學習】包裹式特征選擇之遞歸特征消除法

&#x1f388;個人主頁&#xff1a;豌豆射手^ &#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f917;收錄專欄&#xff1a;機器學習 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共同學習、交流進…

電磁兼容(EMC):電解電容低阻如何選擇詳解

目錄 1 為何要選低阻電解電容 2 電解電容等效高頻等效電路 3 不同廠家ESR參數 4 高頻ESR特性 5 Low ESR鋁電解電容 1 為何要選低阻電解電容 在EMI超標時&#xff0c;將普通電解電容更換為低阻電解電容時&#xff0c;便通過了。這是因為低阻電解電容降低了功率回路的輻射電…

數字化轉型導師堅鵬:證券公司數字化轉型戰略、方法與案例

證券公司數字化轉型戰略、方法與案例 課程背景&#xff1a; 數字化轉型背景下&#xff0c;很多機構存在以下問題&#xff1a; 不清楚證券公司數字化轉型的發展戰略&#xff1f; 不知道證券公司數字化轉型的核心方法&#xff1f; 不知道證券公司數字化轉型的成功案例&am…

LLM 系列——BERT——論文解讀

一、概述 1、是什么 是單模態“小”語言模型&#xff0c;是一個“Bidirectional Encoder Representations fromTransformers”的縮寫&#xff0c;是一個語言預訓練模型&#xff0c;通過隨機掩蓋一些詞&#xff0c;然后預測這些被遮蓋的詞來訓練雙向語言模型&#xff08;編碼器…