SQL分類
SQL 主要語句可以劃分爲一下3類
- DDL:數據定義語言,這些語句定義不同的數據段、數據庫、表、列、索引等數據庫對象。常用語句關鍵字主要包括create,drop,alter等
- DML:數據操作語句,用於添加、刪除、更新和查詢數據庫記錄,並檢查數據完整性。常用語句關鍵字主要包括 insert,delete,update和select等。
- DCL數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要 的語句包括關鍵字grant、revoke等
DDL語句
是對數據庫內部的數據表結構的進行添加 、刪除、修改等操作語言,它和DML語句最大的區別是DML只是對錶內部數據操作,而不涉及表的定義、結構的修改,更不會涉及其他對象。DDL更多地由數據庫管理員(DBA)使用。
- 連接mysql服務器
- mysql -uroot -p
-
- 創建數據庫test1
- create database test1;
-
- 顯示有哪些數據庫
- show databases;
-
- //mysql 自動創建的表有
- information_schema:主要存儲了系統中的一些數據庫信息,比如用戶表信息、列信息、權限信息、字符集信息、分區信息等等
- cluster:存儲了系統的集羣信息
- mysql:存儲了系統的用戶權限信息。
- test:系統自動創建的測試數據庫,任何用戶都可以訪問
-
-
- 選擇數據庫
- use test1
-
- 顯示test1數據庫中創建的所有表
- show tables
-
- 刪除數據庫
- drop database test1;
-
- 創建表
- create table emp(ename varchar(10),hiredata date,sal decimal(10,2),deptno int(2));
-
- 查看錶定義
- desc emp;
-
- 查看創建表的定義
- show create table emp;
-
- 刪除表
- drop table emp;
-
- 修改表
- alter table emp modify ename varchar(20);
-
- 增加表字段
-
- alter table emp add column age int(3);
-
- 刪除表字段
- alter table emp drop column age;
-
- 字段改名
- alter table emp change age age1 int(4);
-
- change 和modify都可以修改表的定義,不同的是change後面需要寫兩次列名,不方便,但是change的優點是可以修改列名稱,則modify則不能
-
- 修改字段排序
- alter table emp add birth date after ename;
- alter table emp modify age int(3) first;
-
- 更改表名
- alter table emp rename emp1;
DML語句
是指對數據庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select)。
- 插入記錄
- insert into emp(ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000',1);
- 也可以不用指定字段名稱,但是values後面的順序要和字段的排列順序一致
- inset into emp('zzx1','2000-01-01','2000',1);
- 含可空字段、非空但是含有默認值的字段、自增字段、可以不用再insert後的字段列表裏面出現,values後面只寫對應字段名稱的value,沒寫的字段可以自動設置爲null、默認值、自增的下一個數字
-
- 批量增加用逗號隔開
- insert into dept values(5,'xxx'),(8,'xxx');
-
- 更新記錄
- update emp set sal=4000 where ename='xxx';
-
- 刪除記錄
- delete from emp where ename='doney';
-
- 查詢記錄
- select * from emp;
- *表示所有記錄,也可以用逗號隔開的字段來選擇查詢
-
- 查詢不重複的記錄
- select distinct deptno from emp;
-
- 條件查詢
- 用where關鍵字來實現,可以使用<>!=等多條件可以使用or、and等
-
- 排序和限制
- desc和asc是排序關鍵字,desc是降序、asc是升序排列 ORDER BY 排序,默認是升序
- select * from emp order by sal;
- 如果排序字段的值一樣,則值相同的字段按照第二個排序字段進行排序,如果只有一個排序字段,則相同字段將會無序排序
- select * from emp order by deptno,sal desc;
- 限制
- select * from emp order by sal limit 3;
- //前者是起始偏移量,後者是顯示行數
- select * from emp order by sal limit 1,3;
-
- limit 和order by 一起使用來做分頁
-
- 聚合
- 用戶做一下些彙總操作
-
- sum(求和),count(*)(記錄數),max(最大值),min(最小值)
- with rollup 是可選語法,表示是否對分類聚合後的結果進行再彙總
- having 表示對分類後的結果在進行條件的過濾。
-
- select deptno,count(1) from emp group by deptno having count(1)>=1;
表連接
大類上分爲外連接和內連接
外鏈接 又分爲左連接和右連接
左連接:包含所以的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄。
右連接:同上
- select ename,detname from emp left join dept on emp.deptno=dept.deptno;
-
- 左連接和右連接可以相互轉換
子查詢
- select * from emp where deptno in(select deptno from dept);
-
- 如果子查詢記錄唯一,可以使用=替代in
- select * from emp where deptno =(select deptno from dept limit 1);
記錄查詢
將兩個表的數據按照一定的查詢出來後,將結果合在一起顯示
union all 是將結果集合併在一起,而union是將union all後的結果在進行一次distinct,去除重複
- select deptno from emp union all select deptno from dept;
-
- select demtno from emp union select deptno from dept;
SQL分類
SQL 主要語句可以劃分爲一下3類
- DDL:數據定義語言,這些語句定義不同的數據段、數據庫、表、列、索引等數據庫對象。常用語句關鍵字主要包括create,drop,alter等
- DML:數據操作語句,用於添加、刪除、更新和查詢數據庫記錄,並檢查數據完整性。常用語句關鍵字主要包括 insert,delete,update和select等。
- DCL數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要 的語句包括關鍵字grant、revoke等
DDL語句
是對數據庫內部的數據表結構的進行添加 、刪除、修改等操作語言,它和DML語句最大的區別是DML只是對錶內部數據操作,而不涉及表的定義、結構的修改,更不會涉及其他對象。DDL更多地由數據庫管理員(DBA)使用。
- 連接mysql服務器
- mysql -uroot -p
-
- 創建數據庫test1
- create database test1;
-
- 顯示有哪些數據庫
- show databases;
-
- //mysql 自動創建的表有
- information_schema:主要存儲了系統中的一些數據庫信息,比如用戶表信息、列信息、權限信息、字符集信息、分區信息等等
- cluster:存儲了系統的集羣信息
- mysql:存儲了系統的用戶權限信息。
- test:系統自動創建的測試數據庫,任何用戶都可以訪問
-
-
- 選擇數據庫
- use test1
-
- 顯示test1數據庫中創建的所有表
- show tables
-
- 刪除數據庫
- drop database test1;
-
- 創建表
- create table emp(ename varchar(10),hiredata date,sal decimal(10,2),deptno int(2));
-
- 查看錶定義
- desc emp;
-
- 查看創建表的定義
- show create table emp;
-
- 刪除表
- drop table emp;
-
- 修改表
- alter table emp modify ename varchar(20);
-
- 增加表字段
-
- alter table emp add column age int(3);
-
- 刪除表字段
- alter table emp drop column age;
-
- 字段改名
- alter table emp change age age1 int(4);
-
- change 和modify都可以修改表的定義,不同的是change後面需要寫兩次列名,不方便,但是change的優點是可以修改列名稱,則modify則不能
-
- 修改字段排序
- alter table emp add birth date after ename;
- alter table emp modify age int(3) first;
-
- 更改表名
- alter table emp rename emp1;
DML語句
是指對數據庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select)。
- 插入記錄
- insert into emp(ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000',1);
- 也可以不用指定字段名稱,但是values後面的順序要和字段的排列順序一致
- inset into emp('zzx1','2000-01-01','2000',1);
- 含可空字段、非空但是含有默認值的字段、自增字段、可以不用再insert後的字段列表裏面出現,values後面只寫對應字段名稱的value,沒寫的字段可以自動設置爲null、默認值、自增的下一個數字
-
- 批量增加用逗號隔開
- insert into dept values(5,'xxx'),(8,'xxx');
-
- 更新記錄
- update emp set sal=4000 where ename='xxx';
-
- 刪除記錄
- delete from emp where ename='doney';
-
- 查詢記錄
- select * from emp;
- *表示所有記錄,也可以用逗號隔開的字段來選擇查詢
-
- 查詢不重複的記錄
- select distinct deptno from emp;
-
- 條件查詢
- 用where關鍵字來實現,可以使用<>!=等多條件可以使用or、and等
-
- 排序和限制
- desc和asc是排序關鍵字,desc是降序、asc是升序排列 ORDER BY 排序,默認是升序
- select * from emp order by sal;
- 如果排序字段的值一樣,則值相同的字段按照第二個排序字段進行排序,如果只有一個排序字段,則相同字段將會無序排序
- select * from emp order by deptno,sal desc;
- 限制
- select * from emp order by sal limit 3;
- //前者是起始偏移量,後者是顯示行數
- select * from emp order by sal limit 1,3;
-
- limit 和order by 一起使用來做分頁
-
- 聚合
- 用戶做一下些彙總操作
-
- sum(求和),count(*)(記錄數),max(最大值),min(最小值)
- with rollup 是可選語法,表示是否對分類聚合後的結果進行再彙總
- having 表示對分類後的結果在進行條件的過濾。
-
- select deptno,count(1) from emp group by deptno having count(1)>=1;
表連接
大類上分爲外連接和內連接
外鏈接 又分爲左連接和右連接
左連接:包含所以的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄。
右連接:同上
- select ename,detname from emp left join dept on emp.deptno=dept.deptno;
-
- 左連接和右連接可以相互轉換
子查詢
- select * from emp where deptno in(select deptno from dept);
-
- 如果子查詢記錄唯一,可以使用=替代in
- select * from emp where deptno =(select deptno from dept limit 1);
記錄查詢
將兩個表的數據按照一定的查詢出來後,將結果合在一起顯示
union all 是將結果集合併在一起,而union是將union all後的結果在進行一次distinct,去除重複
- select deptno from emp union all select deptno from dept;
-
- select demtno from emp union select deptno from dept;