### 9.1、SQL92語法
格式sleect 列 from 表名1[別名], 表名2[別名] where 條件 [group by [having]] [order by]
連接查詢:也可以叫跨表查詢,需要關聯多個表進行查詢
l 顯示每個員工信息,并顯示所屬的部門名稱
```
select ename, dname from emp, dept;
```
```
SQL> select ename, dname from emp, dept;
ENAME DNAME
\---------- --------------
SMITH ACCOUNTING
ALLEN ACCOUNTING
WARD ACCOUNTING
JONES ACCOUNTING
MARTIN ACCOUNTING
BLAKE ACCOUNTING
CLARK ACCOUNTING
SCOTT ACCOUNTING
KING ACCOUNTING
TURNER ACCOUNTING
ADAMS ACCOUNTING
JAMES ACCOUNTING
FORD ACCOUNTING
MILLER ACCOUNTING
SMITH RESEARCH
ALLEN RESEARCH
WARD RESEARCH
JONES RESEARCH
MARTIN RESEARCH
BLAKE RESEARCH
CLARK RESEARCH
SCOTT RESEARCH
KING RESEARCH
TURNER RESEARCH
ADAMS RESEARCH
JAMES RESEARCH
FORD RESEARCH
MILLER RESEARCH
SMITH SALES
ALLEN SALES
WARD SALES
JONES SALES
MARTIN SALES
BLAKE SALES
CLARK SALES
SCOTT SALES
KING SALES
TURNER SALES
ADAMS SALES
JAMES SALES
FORD SALES
MILLER SALES
SMITH OPERATIONS
ALLEN OPERATIONS
WARD OPERATIONS
JONES OPERATIONS
MARTIN OPERATIONS
BLAKE OPERATIONS
CLARK OPERATIONS
SCOTT OPERATIONS
KING OPERATIONS
TURNER OPERATIONS
ADAMS OPERATIONS
JAMES OPERATIONS
FORD OPERATIONS
MILLER OPERATIONS
已選擇56行。
```
以上輸出,不復合預期結果,輸出了56條數據,其實就是兩個表記錄的成績,這種情況我們稱為:“笛卡兒乘積”,出現錯誤的原因是:沒有指定連接條件
>[danger]笛卡兒乘積:所有數據的乘積,這種情況是嚴重的浪費資源,怎么解決呢?
在語句后面添加where 條件數量至少是n-1而且必須使用多個表之間的關聯列
指定連接條件
```
select emp.ename, dept.dname from emp, dept where emp.deptno=dept.deptno;
也可以使用別名
select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno;
```

以上結果輸出正確,因為加入了正確的連接條件
以上查詢也稱為 “內連接”,只查詢相等的數據(連接條件相等的數據)
l 取得員工和所屬的領導的姓名
```
select e.ename, m.ename from emp e, emp m where e.mgr=m.empno;
```
```
SQL> select \* from emp;(普通員工)
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
\---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月\-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月\-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月\-81 950 30
7902 FORD ANALYST 7566 03-12月\-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇14行。
SQL> select \* from emp;(管理者)
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
\---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月\-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月\-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月\-81 950 30
7902 FORD ANALYST 7566 03-12月\-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已選擇14行。
SQL> select e.ename, m.ename from emp e, emp m where e.mgr=m.empno;
ENAME ENAME
\---------- ----------
SMITH FORD
ALLEN BLAKE
WARD BLAKE
JONES KING
MARTIN BLAKE
BLAKE KING
CLARK KING
SCOTT JONES
TURNER BLAKE
ADAMS SCOTT
JAMES BLAKE
FORD JONES
MILLER CLARK
已選擇13行。
```
以上稱為“自連接”,只有一張表連接,具體的查詢方法,把一張表看作兩張表即可,如以上示例:第一個表emp e代表了員工表,emp m代表了領導表,相當于員工表和部門表一樣
- 空白目錄
- 1、數據庫概述及數據準備
- 1.1、SQL概述
- 1.2、什么是數據庫
- 1.3、MySql概述
- 1.4、MySql的安裝
- 1.5、表
- 1.6、SQL的分類
- 1.7、導入演示數據
- 1.8、表結構描述
- 2、常用命令
- 2.1、查看msyql版本
- 2.2、創建數據庫
- 2.3、查詢當前使用的數據庫
- 2.4、終止一條語句
- 2.5、退出mysql
- 3、查看“演示數據”的表結構
- 3.1、查看和指定現有的數據庫
- 3.2、指定當前缺省數據庫
- 3.3、查看當前使用的庫
- 3.4、查看當前庫中的表
- 3.5、查看其他庫中的表
- 3.6、查看表的結構
- 3.7、查看表的創建語句
- 4、簡單的查詢
- 4.1、查詢一個字段
- 4.2、查詢多個字段
- 4.3、查詢全部字段
- 4.4、計算員工的年薪
- 4.5、將查詢出來的字段顯示為中文
- 5、條件查詢
- 5.1 概述
- 5.2 等號操作符
- 5.3不等號操作符
- 5.4 between … and …操作符
- 5.5 is null
- 5.6 and
- 5.7 or
- 5.8 表達式的優先級
- 5.9 in
- 5.10 not
- 5.11 like
- 6、排序數據
- 6.1、單一字段排序
- 6.2、手動指定排序順序
- 6.3、多個字段排序
- 6.4、使用字段的位置來排序
- 7、分組函數/聚合函數/多行處理函數
- 7.1、count
- 7.2、sum
- 7.3、avg
- 7.4、max
- 7.5、min
- 7.6、組合聚合函數
- 7.7 函數總結(了解內容)
- 7.1數據處理函數(單行處理函數)
- 8、分組查詢
- 8.1、group by
- 8.2、having
- 8.3、select語句總結
- 9、連接查詢
- 9.1、SQL92語法
- 9.2、SQL99語法
- 10、子查詢
- 10.1、在where語句中使用子查詢,也就是在where語句中加入select語句
- 10.2、在from語句中使用子查詢,可以將該子查詢看做一張表
- 10.3、在select語句中使用子查詢
- 11、union
- 11.1、union可以合并集合(相加)
- 12、limit 的使用
- 12.1、取得前5條數據
- 12.2、從第二條開始取兩條數據
- 12.3、取得薪水最高的前5名
- 13、表
- 13.1、創建表
- 13.2、增加/刪除/修改表結構
- 13.2.1、添加字段
- 13.2.2、修改字段
- 13.2.3、刪除字段
- 13.3、添加、修改和刪除
- 13.3.1、insert
- 13.3.2、update
- 13.3.3、delete
- 總結
- 13.4、創建表加入約束
- 13.4.1、非空約束,not null
- 13.4.2、唯一約束,unique
- 13.4.3、主鍵約束,primary key
- 13.4.4、外鍵約束,foreign key
- 13.4.5、級聯更新與級聯刪除
- 13.4.5.1、on update cascade;
- 13.4.5.2、on delete cascade;
- 13.5、t_student和t_classes完整示例
- 14、存儲引擎(了解)
- 14.1、存儲引擎的使用
- 14.2、常用的存儲引擎
- 14.2.1、MyISAM存儲引擎
- 14.2.2、InnoDB存儲引擎
- 14.2.3、MEMORY存儲引擎
- 14.3、選擇合適的存儲引擎
- 15、事務
- 15.1、概述
- 15.2、事務的提交與回滾演示
- 15.3、自動提交模式
- 15.4、事務的隔離級別
- 15.4.1、隔離級別
- 15.4.2、四個隔離級別
- 15.4.3、隔離級別與一致性問題的關系
- 15.4.4、設置服務器缺省隔離級別
- 15.4.5、隔離級別的作用范圍
- 15.4.6、查看隔離級別
- 15.4.7、并發事務與隔離級別示例
- 16、索引
- 16.1、索引原理
- 16.2、索引的應用
- 16.2.1、創建索引
- 16.2.2、查看索引
- 16.2.3、使用索引
- 16.2.4、刪除索引
- 17、視圖
- 17.1、什么是視圖
- 17.2、創建視圖
- 17.3、修改視圖
- 17.4、刪除視圖
- 18、DBA命令(了解)
- 18.1、新建用戶
- 18.2、授權
- 18.3、回收權限
- 18.4、導出導入
- 18.4.1、導出
- 18.4.1.1、導出整個數據庫
- 18.4.1.2、導出指定庫下的指定表
- 18.4.2、導入
- 19、數據庫設計的三范式
- 19.1、第一范式
- 19.2、第二范式
- 19.3、第三范式
- 19.4、三范式總結
- 作業
- 1、取得每個部門最高薪水的人員名稱
- 2、哪些人的薪水在部門的平均薪水之上
- 3、取得部門中(所有人的)平均的薪水等級
- 4、不準用組函數(Max),取得最高薪水
- 5、取得平均薪水最高的部門的部門編號
- 6、取得平均薪水最高的部門的部門名稱
- 7、求平均薪水的等級最低的部門的部門名稱
- 8、取得比普通員工(員工代碼沒有在mgr字段上出現的)的最高薪水還要高的領導人姓名
- 9、取得薪水最高的前五名員工
- 10、取得薪水最高的第六到第十名員工
- 11、取得最后入職的5名員工
- 12、取得每個薪水等級有多少員工
- 13、面試題
- 14、列出所有員工及領導的姓名
- 15、列出受雇日期早于其直接上級的所有員工的編號,姓名,部門名稱
- 16、列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門.
- 17、列出至少有5個員工的所有部門
- 18、列出薪金比"SMITH"多的所有員工信息.
- 19、列出所有"CLERK"(辦事員)的姓名及其部門名稱,部門的人數.
- 20、列出最低薪金大于1500的各種工作及從事此工作的全部雇員人數.
- 21、列出在部門"SALES"<銷售部>工作的員工的姓名,假定不知道銷售部的部門編號.
- 22、列出薪金高于公司平均薪金的所有員工,所在部門,上級領導,雇員的工資等級.
- 23、列出與"SCOTT"從事相同工作的所有員工及部門名稱.
- 24、列出薪金等于部門30中員工的薪金的其他員工的姓名和薪金.
- 25、列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金.部門名稱.
- 26、列出在每個部門工作的員工數量,平均工資和平均服務期限.
- 27、列出所有員工的姓名、部門名稱和工資。
- 28、列出所有部門的詳細信息和人數
- 29、列出各種工作的最低工資及從事此工作的雇員姓名
- 30、列出各個部門的MANAGER(領導)的最低薪金
- 31、列出所有員工的年工資,按年薪從低到高排序
- 32、求出員工領導的薪水超過3000的員工名稱與領導名稱
- 33、求出部門名稱中,帶'S'字符的部門員工的工資合計、部門人數.
- 34、給任職日期超過30年的員工加薪10%.
- 教務管理系統(項目)