dos命令窗口:mysql
-- mysql(或者是mysqlsh) -u帳號名 -p密碼 mysql -uroot -p123
-- 使用數據庫 use db_name;
-- 查看當前使用的數據庫 select database(); -- 查看當前數據庫版本 select version();
-- 查看數據庫目錄 show databases; -- 查看數據庫中的表目錄 show tables; -- 查看其餘庫中的表 show tables from db_name; -- 查看錶的建立語句 show create table tb_name;
-- 查看錶結構 desc tb_name;
-- 查看語句的執行狀態(執行計劃) explain select ename,sal from emp where sal = 5000;
-- 建立一個數據庫 create database db_name;
-- 刪除一個數據庫 drop database db_name;
-- 加載 sql 文件,拖拽文件到dos窗口會自動生成路徑 -- \source source D:\AllCode\SQLCode\test.sql
介紹:分頁查詢
limit <startIndex>, <lenght>
sql startInsdex 表示起始位置,從 0 開始。數據庫
lenght 表示取幾個。函數
固定公式:每頁顯示 pageSize 條記錄:ui
limit (pageNo - 1) * pageSize, pageSize
spa
# 例子,顯示前五頁的數據 -- 從 5 開始,取 5 個,將顯示第 5~10 條的數據。 select ename,sal from emp order by sal desc limit 5,5;
-- 終止一條語句 \c 或者按ctrl+c鍵 -- 退出 mysql \q 或者 quit 或者 exit
介紹:建立表code
-- 建表語句的語法格式: create table 表名( 字段名1 數據類型, 字段名1 數據類型, 字段名1 數據類型, ...... ); -- 將查詢結果作一張表:create table 表名 as select語句; create table t_test as select * from emp;
constraint | 約束 | 介紹 |
---|---|---|
not null | 非空約束 | 約束的字段不能爲null |
unique | 惟一約束 | 約束的字段不能重複,但可爲null |
primary key | 主鍵約束 | 約束的字段既不能爲null,也不能重複,一張表只能存其一 |
foreign key | 外鍵約束 | 外鍵值能夠爲null,被引用的字段不必定是主鍵,但至少具備unique約束 |
-- 列級約束 -- not null 只有列級約束 drop table if exists t_class; create table t_class( cid int primary key, -- 主鍵約束 cname varchar(255) unique, -- 惟一約束 cpassword varchar(255) not null, -- 非空約束 )
-- 表級約束 drop table if exists t_student; create table t_student( sid int auto_increment, -- 自增 classid int, sname varchar(255), scode varchar(255), spassword varchar(255), -- 聯合約束,二者其一俱備惟一性便可 unique(sname,scode), -- 複合主鍵 primary key(sid,spassword) -- 外鍵引用 foreign key(classid) references t_class(cid) )
-- 刪除一張表 drop table 表名; -- 若是表存在則刪除,mysql特有語句 drop table if exists 表名;
介紹:往表裏添加數據。對象
-- 添加一行記錄 insert into 表名(字段名1, 字段名2, ...) values (數據1, 數據2, ...); -- 添加一行記錄,省略字段 insert into 表名 values (數據1, 數據2, ...); -- 添加兩行記錄 insert into 表名(字段名1, 字段名2, ...) values (數據1, 數據2, ...), (數據1, 數據2, ...); -- 將查詢結果插入到一張表中:insert into 表名 select語句; insert into t_test select * from emp;
修改表中的數據排序
-- 語法格式:update 表名 set 字段名1=值1,字段名2=值2...where條件; update emp set ename = 'black', sal = 1234 where deptno = 10;
刪除表中的數據索引
-- 語法格式:delete from 表名 where條件 delete from emp where deptno = 10;
介紹:永久截斷(刪除)表中的數據,不可回滾。
truncate table emp;
介紹:主鍵和具備unique約束的字段會自動添加索引。
# create index 索引名稱 on 表名(字段名); # drop index 索引名稱 on 表名; -- 給sal字段添加索引 create index emp_sal_index on emp(sal); -- 刪除索引 drop index emp_sal_index;
只能經過DQL語句建立視圖對象。
能夠對視圖進行CRUD操做。
對視圖進行增刪改查,會影響到原表數據。
-- 建立視圖 create view myview as select empno,ename from emp; -- 刪除視圖 drop view myview;
select -- execute order 5 ... from -- execute order 1 where -- execute order 2 ... group by -- execute order 3 ... having -- execute order 4 ... order by -- execute order 6 ... limit -- execute order 7 ...
運算符 | 說明 |
---|---|
= | 等於 |
<> 或 != | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
between ... and ... | 兩個值之間 |
is null | 爲空(is not null 不爲空) |
and | 與 |
or | 或 |
in( , ) | 包含(not in(,) 不包含) |
not | 取非 |
like | 模糊查詢(使用 % 與 _ 匹配) |
-- asc表示升序,desc表示降序,默認是升序 select 字段... from 表名 order by 字段 desc; -- 多字段排序,越靠前的字段越起主導做用,優先知足前排字段的條件 # 例子,emp是員工表,ename是員工名,sal是員工工資 select ename,sal from emp order by sal desc, ename asc;
函數 | 說明 |
---|---|
count() | 取得記錄數 |
sum() | 求和 |
avg() | 取平均值 |
max() | 獲取最大值 |
min() | 獲取最小值 |
注意一:全部的多行處理函數都是對某一組數據進行操做
注意二:多行處理函數自動忽略 null
注意三:多行處理函數不能出如今where子句中
注意四:多行處理函數在group by語句後執行
# emp是員工表,sal 是員工工資 select sum(sal) from emp; -- 找出工資總和 select avg(sal) from emp; -- 算出平均工資 select max(sal) from emp; -- 找出最高工資 select min(sal) from emp; -- 找出最低工資 select count(*) from emp; -- 找出總條數 select count(sal) from emp; -- 找出不爲null的條數
# emp是員工表,comm 是員工津貼 -- ifnull(可能爲null的數據,被當作什麼處理) select ename,ifnull(comm,0) from emp;
-- 去除重複記錄 select distinct 字段 from 表名; -- distinct 修飾多個字段時,全部字段聯合去重 select distinct 字段1,字段2... from 表名;
注意一:distinct 只能出如今全部字段的最前方
語法格式 | 說明 |
---|---|
inner join...on... |
內鏈接,只會將參與鏈接的表A,表B相匹的數據查詢出來。inner 關鍵字可省略。 |
left outer join...on... |
外鏈接,優先查詢主表,副表無匹配項時以 null 填充。left 修飾左邊的表爲主表,outer 關鍵字可省略。 |
right outer join...on... |
外鏈接,優先查詢主表,副表無匹配項時以 null 填充。right 修飾右邊的表爲主表,outer 關鍵字可省略。 |
介紹:可將兩次查詢的結果拼接成一張表,一般用於拼接兩張絕不相干的表。
注意:參與拼接的表列數必須相同
-- 語法 select ... from ... union select ... from ...
介紹:事務(Transaction)
和事務有關的語句只有 DML語句(
insert, delete, update
)
-- 開啓事務 start transaction; -- 回滾 rollback; -- 提交 commit; -- 設置回滾點, 回滾:rollback name; savepoint name;
在 sql 中,null 參與運算的結果一定爲 null。
-- 部門表 create table dept( deptno int primary key auto_increment, -- 部門編號 dname varchar(14) , -- 部門名字 loc varchar(13) -- 地址 ) ; -- 員工表 create table emp( empno int primary key auto_increment,-- 員工編號 ename varchar(10), -- 員工姓名 - job varchar(9), -- 崗位 mgr int, -- 直接領導編號 hiredate date, -- 僱傭日期,入職日期 sal int, -- 薪水 comm int, -- 提成 deptno int not null, -- 部門編號 foreign key (deptno) references dept(deptno) ); insert into dept values(10,'財務部','北京'); insert into dept values(20,'研發部','上海'); insert into dept values(30,'銷售部','廣州'); insert into dept values(40,'行政部','深圳'); insert into emp values(7369,'劉一','職員',7902,'1980-12-17',800,null,20); insert into emp values(7499,'陳二','推銷員',7698,'1981-02-20',1600,300,30); insert into emp values(7521,'張三','推銷員',7698,'1981-02-22',1250,500,30); insert into emp values(7566,'李四','經理',7839,'1981-04-02',2975,null,20); insert into emp values(7654,'王五','推銷員',7698,'1981-09-28',1250,1400,30); insert into emp values(7698,'趙六','經理',7839,'1981-05-01',2850,null,30); insert into emp values(7782,'孫七','經理',7839,'1981-06-09',2450,null,10); insert into emp values(7788,'周八','分析師',7566,'1987-06-13',3000,null,20); insert into emp values(7839,'吳九','總裁',null,'1981-11-17',5000,null,10); insert into emp values(7844,'鄭十','推銷員',7698,'1981-09-08',1500,0,30); insert into emp values(7876,'郭十一','職員',7788,'1987-06-13',1100,null,20); insert into emp values(7900,'錢多多','職員',7698,'1981-12-03',950,null,30); insert into emp values(7902,'大錦鯉','分析師',7566,'1981-12-03',3000,null,20); insert into emp values(7934,'木有錢','職員',7782,'1983-01-23',1300,null,10);