select * from emp select * from dept select * from job select * from salarygrade -- 1.查詢所有員工信息。查詢員工編號,員工姓名,工資,職務名稱,職務描述 SELECT t1.mgr, t1.ename, t1.sa ...
select * from emp select * from dept select * from job select * from salarygrade -- 1.查詢所有員工信息。查詢員工編號,員工姓名,工資,職務名稱,職務描述 SELECT t1.mgr, t1.ename, t1.salary, t2.jname, t2.description FROM emp AS t1, job AS t2 WHERE t1.job_id = t2.id -- 2.查詢員工編號,員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置 SELECT t1.ename, t1.salary, t2.jname, t2.description, t3.dname, t3.loc FROM emp AS t1, job AS t2, dept AS t3 WHERE t1.job_id = t2.id and t1.dept_id = t3.id -- 3.查詢員工姓名,工資,工資等級 SELECT t1.ename, t1.salary, t2.grade FROM emp AS t1, salarygrade as t2 where t1.salary BETWEEN t2.losalary and hisalary -- 4.查詢員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置,工資等級 SELECT t1.ename, t1.salary, t2.jname, t2.description, t3.dname, t3.loc, t4.grade FROM emp AS t1, job AS t2, dept AS t3, salarygrade as t4 WHERE t1.job_id = t2.id and t1.dept_id = t3.id and t1.salary BETWEEN t4.losalary and t4.hisalary -- 5.查詢出部門編號、部門名稱、部門位置、部門人數 SELECT t1.*, COUNT(t2.id) 部門人數 FROM dept AS t1, emp AS t2 WHERE t2.dept_id = t1.id GROUP BY t2.dept_id SELECT dept.*,t1.num from dept,(select dept_id,COUNT(*) num from emp GROUP BY dept_id) t1 where t1.dept_id = dept.id
SQL總結: ******************************************************************************** 1.ddl語句: 操作資料庫或表 //創建資料庫 create Database if not 資料庫名稱; //刪除資料庫 drop database if exists 資料庫名稱 //使用資料庫 use 資料庫名稱 //查看資料庫 show database //查看當前使用的資料庫 select database() --------------------------------------------------------------------- //查詢該資料庫下的所有表 select tables //查詢表結構 desc 表的名稱 //創建表 create table 表的名稱(欄位1名稱 數據類型 約束 , 欄位2名稱 數據類型 約束, 欄位3名稱 數據類型 約束 ) //刪除表 drop table if exists 表的名稱 //修改表的名稱 alter table 表的名稱 rename to 新的表名 //添加列 alter table 表的名稱 add 列名 數據類型; //修改列的數據類型 alter table 表的名稱 modify 列名 新的數據類型; //修改列的名稱以及數據類型 alter table 表的名稱 change 列名 新列名 新數據類型 //刪除列 alter table 表的名稱 drop 列名 ; ******************************************************************************** 2.dml語句:對數據進行操作 //添加數據【指定列添加】 insert into 表的名稱 (欄位名1,欄位名2,欄位名3,……) values(欄位名1值,欄位名2值,欄位名3值,……) //添加數據【給全部列添加數據】 insert into 表的名稱 values(欄位名1值,欄位名2值,欄位名3值,……) //添加數據【給全部列添加數據,多條數據同時添加】 insert into 表的名稱 values(欄位名1值,欄位名2值,欄位名3值,……), (欄位名1值,欄位名2值,欄位名3值,……), (欄位名1值,欄位名2值,欄位名3值,……); //修改數據【指定列修改】 update 表的名稱 set 列名1=值1,列名2=值2,列名3=值3,…… where 條件【不指定條件就會將所有行的數據全部更改】 //刪除數據 delete from 表的名稱 where 條件【不指定條件就會將所有行的數據刪除】 ******************************************************************************** 3.dql語句:資料庫查詢語言 ①select from 查詢 ②distinct 去重 ③as 別名 ④條件{ > 大於 >= 大於或等於 != / <> 不等 < 小於 <= 小於或等於 between …… and …… 在……範圍內 in() 多選一 like 模糊查詢【_代表單個任意字元 %代表多個任意字元】 is null/is not null 不為空 and /&& 和 or /|| 或 not/! 非 } ⑤排序 order by 【ASC升序 DESC降序】 ⑥聚合函數{ count() 統計數量【不統計為null的列】 max() 最大值 min() 最小值 sum() 求和 avg() 平均值 } ⑦分組 group by ⑧分組後限定條件 having ⑨分組前的限定條件 where ⑩分頁查詢 limit 起始索引 , 查詢條目數; ******************************************************************************** 4.dcl:數據控制語言 grant 授權 set 設置 @@autocommit 自動提交事務 begin 開啟事務 commit 提交事務 rollback 回滾事務 事務的四大特征:AICO 原子性【要麼同時成功,要麼都失敗】 一致性【數據總量不變】 隔離性【開啟多個事務查詢數據】 持久性【通過commit提交或rollback回滾實現數據更新】 預設自動提加事務【要手動提交事務方法--》set @@autocommit =0 預設是1】 一旦設置為手動提交事務則必須自主提交,不然數據無法更新
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 多表查詢: 1.內連接 inner join on 【inner可以不寫】 2.外連接 left join【左連接:查詢左表的全部數據以及與右表交集部分數據】 right join【右連接:查詢右表的全部數據以及與右表交集部分數據】 3.子查詢 =(子查詢語句【子查詢語句輸出的是單列單行數據時使用=】) in(子查詢語句【子查詢語句輸出的是單列多行數據時使用in】) 約束: 1.非空約束 not null 2.唯一約束[自動添加] unique [auto_increment] 3.主鍵約束 primary key 4.預設約束 default 5.外鍵約束 constraint 外鍵名稱 foreign key(外鍵欄位名) references 主表名(主表列名) 資料庫設計: 1.一對一 【例如:用戶 和 用戶詳情 一對一關係多用於表拆分,將一個實體中經常使用的欄位放一張表, 不經常使用的欄位放另一張表,用於提升查詢性能】 實現方式: 在任意一方加入外鍵,關聯另一方主鍵,並且設置外鍵為唯一(UNIQUE) 2.一對多 【例如:部門 和 員工 一個部門對應多個員工,一個員工對應一個部門】 實現方式: 在多的一方建立外鍵,指向一的一方的主鍵 3.多對多 【例如:商品 和 訂單 一個商品對應多個訂單,一個訂單包含多個商品】 實現方式: 建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵