Linux云計算訓練營筆記day09(MySQL數據庫)
目錄
- Linux云計算訓練營筆記day09(MySQL數據庫)
- 外鍵約束
- 數據的導入和導出
- 數據的導出
- 數據的導入
- DQL 數據查詢語言
- 查指定字段
- 查所有字段
- where 過濾條件
- and 和 or
- in 和 not in
- between...and...
- distinct
- 練習:
- like 模糊查詢
- NULL
- order by
- 分頁查詢
主鍵約束
PRIMARY KEY 非空 唯一
外鍵約束
FOREIGN KEY 聲明了外鍵的列上插入的值必須在另一個表的主鍵上出現過
-- Active: 1747188627686@@127.0.0.1@3306@tedu
CREATE DATABASE job CHARSET=utf8;use job;-- 部門表 dept
CREATE TABLE dept(did INT PRIMARY KEY AUTO_INCREMENT,dname VARCHAR(10) UNIQUE
);INSERT INTO dept VALUES(10,"研發部");
INSERT INTO dept VALUES(20,"運營部");
INSERT INTO dept VALUES(30,"市場部");SELECT * from dept;
-- 員工表 emp
CREATE Table emp(eid INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(10) not NULL,birthday date,salary DOUBLE(8,2),deptId INT,Foreign Key (deptId) REFERENCES dept(did)
);INSERT INTO emp VALUES(1,"王林","1999-11-17",8888.88,10);
INSERT INTO emp VALUES(2,"李木婉","2000-11-17",9999.99,20);SELECT * from emp;
數據的導入和導出
數據的導出
mysqldump -u用戶名 -p密碼 數據庫的名字 > 文件的名字.sql
把當前電腦的數據庫導入出去
mysqldump -uroot -proot job > job.sql
數據的導入
數據準備tedu.sql
點擊如下鏈接可以下載
https://download.csdn.net/download/weixin_46411355/90842134
把別人的數據庫導入進來
mysql -uroot -proot < tedu.sql
DQL 數據查詢語言
查詢 SELECT
查指定字段
select 字段1,字段2 from 表; 查指定字段
查所有字段
select * from 表; 查所有字段
where 過濾條件
where 過濾條件 ,會把滿足的條件查詢出來
use tedu;-- 查詢所有字段
SELECT * FROM teacher;desc teacher;-- 查看指定字段
SELECT name,salary,gender,title from teacher;
-- 查看所有學生的名字,年齡,性別,生日
desc student;
SELECT name,age,gender,birth from student;-- 查看職稱為 一級講師 的老師的名字,職稱,工資,年齡
select name,title,salary,age
from teacher
where title="一級講師";-- 查看除了 劉蒼松 以為的所有老師的名字,工資,獎金,職位
SELECT name,salary,comm,title
from teacher
where name <> "劉蒼松";-- 查看 職位是 大隊長 的學生的名字,年齡, 性別
SELECT name,age,gender
FROM student
where job="大隊長";-- 查看年齡在30歲以上(包含)的老師的名字,職稱,工資,獎金
SELECT name,title,salary,comm
from teacher
where age>=30;-- 查看2層以上(包含)的班級有哪些,列出班級名字,所在樓層
SELECT name,floor
from class
WHERE floor>=2;
and 和 or
連接多個條件
and 與 并且 兩邊都為真結果才為真
or 或 兩邊都為假結果才是假
and的優先級高于or的
如果想提高優先級,可以使用( )
-- 查看 7歲 的 大隊長 都有誰,列出這些學生的名字,年齡,性別和職稱
SELECT name,age,gender,job
from student
where age=7 and job="大隊長";-- 查看班級編號小于6的所有中隊長都有誰,列出這些學生的名字,年齡,性別,班級編號和職位
SELECT name,age,gender,class_id,job
from student
WHERE class_id<6 and job="中隊長";-- 查看所有一級講師和三級講師的名字,職稱title,工資
SELECT name,title,salary
from teacher
where title="一級講師" or title="三級講師";-- 查看所有大隊長, 中隊長,小隊長的名字,性別,年齡和職位job
SELECT name,gender,age,job
from student
WHERE job="大隊長" or job="中隊長" or job="小隊長";-- 查看班級編號在6(包含)以下的所有大隊長和中隊長的名字,年齡,性別,班級和職位
SELECT name,age,gender,class_id,job
from student
WHERE class_id<=6 and (job="大隊長" or job="中隊長");desc student;
in 和 not in
in(列表) 表示字段的值在列表中
not in(列表) 表示字段的值不在列表中
-- 查看所有大隊長,中隊長和小隊長的名字,性別,年齡和職位
SELECT name,gender,age,job
from student
WHERE job in ("大隊長","中隊長","小隊長");-- 查看所有 一級講師, 二級講師,三級講師的名字,職稱,工資和性別
SELECT name,title,salary,gender
from teacher
WHERE title in ("一級講師", "二級講師","三級講師");-- 查看除了一級講師和二級講師之外的所有老師的名字,職稱,工資
SELECT name,title,salary
from teacher
WHERE title not in ("一級講師", "二級講師");
-- WHERE title <> "一級講師" and title <> "二級講師";-- 查看除了大隊長,中隊長,小隊長之外的其他學生的名字,職位,性別和年齡
SELECT name,job,gender,age
from student
WHERE job not in ("大隊長","中隊長","小隊長");
between…and…
between n and m 在n和m之間
not between n and m 不在n和m之間
-- 查看工資在2000到5000之間的老師的名字,性別,年齡,工資
SELECT name,gender,age,salary
from teacher
WHERE salary BETWEEN 2000 and 5000;-- 查看年齡在7歲到10歲的學生名字,性別,年齡
SELECT name,gender,age
from student
WHERE age BETWEEN 7 and 10;-- 查看年齡在20到35之間的男老師都有誰,列出名字,性別,年齡,職稱
SELECT name,gender,age,title
from teacher
WHERE age BETWEEN 20 and 35
and gender="男";-- 查看所有3-5層的班級都有哪些,列出班級名稱和所在樓層
SELECT name,floor
from class
WHERE floor BETWEEN 3 and 5;-- 查看年齡在7到10歲以外的學生的名字,性別,年齡
SELECT name,gender,age
from student
WHERE age not BETWEEN 7 and 10;
distinct
distinct 去除重復行
distinct用在select關鍵字之后,可以將結果中指定字段重復的記錄去除
distinct后面可以指定多個字段
-- 查看老師都有哪些職稱
SELECT DISTINCT title
from teacher;
-- 查看學生都有哪些職位
select DISTINCT job
from student;
-- 查看各年齡段的學生都有哪些職位
SELECT DISTINCT age,job
from student;
練習:
-- 1.查看負責課程編號為1的男老師都有誰?
SELECT name
from teacher
WHERE subject_id=1 and gender="男";-- 2.查看工資高于5000的女老師都有誰?
SELECT name
from teacher
WHERE salary>5000 and gender="女";-- 3.查看工資高于5000的男老師或所有女老師的工資?
SELECT name,gender,salary
from teacher
WHERE salary>5000 and gender="男" or gender="女"
;
-- 4.查看所有9歲學生的學習委員和語文課代表都有誰?
SELECT name,age,job
from student
WHERE age=9 and job in ("學習委員","語文課代表");-- 5.查看工資在6000到10000之間的老師以及具體工資
SELECT name,salary
from teacher
WHERE salary BETWEEN 6000 and 10000;-- 6.查看工資在4000到8000以外的老師以及具體工資
SELECT name,salary
from teacher
WHERE salary NOT BETWEEN 4000 and 8000;-- 7.查看老師負責的課程編號都有什么?
SELECT DISTINCT subject_id
from teacher;-- 8.查看所有女老師的職稱都是什么?
SELECT DISTINCT title
from teacher
WHERE gender="女";-- 9.查看7-10歲男同學的職位都有哪些?
SELECT DISTINCT job
from student
WHERE age BETWEEN 7 and 10
AND gender="男";-- 10.查看一級講師和二級講師的獎金是多少?
SELECT name,comm
from teacher
WHERE title IN ("一級講師","二級講師");-- 11.查看除了老板和總監的其他老師的工資和獎金是多少?
SELECT name,salary,comm
from teacher
WHERE title not in ("老板","總監");-- 12.查看 3年級2班 和 5年級3班 在哪個樓層?
SELECT name,floor
from class
WHERE name in ("3年級2班","5年級3班");
like 模糊查詢
兩個通配符
_ 表示一個字符
% 表示任意多個字符 0-n
like %x% 只要包含x
like x% 表示以x開頭 iphone%
like %x 表示以x結尾
like _x% 表示第二個字符是x
like %x_y 倒數第三個是x,最后一個是y
like x%y 表示以x開頭,以y結尾
like __x% 表示第三個字符是x
- 查看名字中包含 晶 的老師都有誰
SELECT name
from teacher
WHERE name LIKE "%晶%";-- 查看姓張的學生都有誰
SELECT name
from student
WHERE name LIKE "張%";-- 查看三個字名字中第二個字是 平 的學生都有誰
SELECT name
from student
WHERE name LIKE "_平_";-- 查看最后一個字是 晶 的老師都有誰
SELECT name
from teacher
WHERE name LIKE "%晶";-- 1.查詢名字姓 李 的學生姓名
SELECT *
from student
WHERE name LIKE "李%";-- 2.查詢名字中包含 江 的學生姓名
SELECT *
from student
WHERE name LIKE "%江%";-- 3.查詢名字以 郭 結尾的學生姓名
SELECT *
from student
WHERE name LIKE "%郭";-- 4.查詢 9-12歲里是 課代表 的學生信息
SELECT *
from student
WHERE age BETWEEN 9 and 12
and job LIKE "%課代表";-- 5.查詢名字第二個是 苗 的學生信息
SELECT *
from student
WHERE name LIKE "_苗%";-- 6.查詢姓 邱 的課代表都是誰
SELECT *
from student
WHERE name LIKE "邱%"
AND job LIKE "%課代表";-- 7.查看哪些學生是 課代表? 列出他的名字和職位
SELECT name,job
from student
WHERE job LIKE "%課代表";-- 8.查看所有的2班都在哪層?
SELECT *
from class
WHERE name LIKE "%2班";
NULL
在數據庫中 所有字段默認值都是NULL,他表示不存在,是空
NULL不能算作一個值,應該是一種狀態
判斷NULL
is NULL 判斷一個字段的值是否為空
is not NULL 判斷一個字段的值是否為非空
不可以用 = 或者 <> 來判斷NULL
-- 哪些老師沒有獎金
SELECT *
from teacher
WHERE comm is NULL;-- 哪些老師有獎金 (哪些老師的獎金不為空 is NOT NULL)
SELECT *
from teacher
WHERE comm is NOT NULL and comm <> 0;
order by
把查詢的結果按照指定的字段升序或降序
asc: 按照指定字段升序 小到大
desc: 按照指定字段降序 大到小
不指定排序方式,默認為升序
如果按照多字段排序:
首先將結果集按照第一個字段進行排序
當第一個字段值重復的時候,在按照第二個字段進行排序
優先級: order by后第一個字段為最先,第二個排第二
日期比較大小規則: 距離現在越近的日期越大
NULL在數據庫中被視作最小值
-- 查看老師的工資從高到底
SELECT name,salary
from teacher
ORDER BY salary desc;-- 查看老師的獎金排名
SELECT name,comm
from teacher
ORDER BY comm desc;-- 查看學生的生日,按照從遠到近(小到大 升序)
SELECT *
from student
ORDER BY birth ASC; -- 查看7-10歲的學生信息,學生按照年齡從大到小排序(同年齡的看生日)
SELECT name,birth
from student
WHERE age BETWEEN 7 and 10
ORDER BY birth;-- 查看老師的工資和獎金,首先按照獎金的升序,在按照的工資的降序
SELECT name,salary,comm
from teacher
ORDER BY comm ASC,salary desc;
分頁查詢
分頁查詢: 將查詢的結果按照分段顯示出來
當查詢的結果較多時,就可以使用分頁查詢
語法:
select xx
from xx
where xx
order by xx
limit M,N
M和N是兩個整數
M: 表示跳過結果集中多少條記錄(起始位置)
N: 表示從M位置開始查詢出多少條記錄
分頁中常見的參數:
- 當前的頁數
- 每頁顯示多少條記錄
M: (當前頁數-1)*每頁顯示的條目數
N: 每頁顯示多少條
-- 查看老師工資的前5名
-- 1)按照工資進行降序 2)分頁查詢
-- M: (當前頁數-1)*N M:(1-1)X5 => M: 0
-- N: 5
SELECT name,salary
from teacher
ORDER BY salary desc
LIMIT 0,5;
-- 第一頁的數據 M:(1-1)X5 M: 0 N:5
-- 第二頁的數據 M: (2-1)X5 M: 5 N: 5
SELECT name,salary
from teacher
ORDER BY salary desc
LIMIT 5,5;-- 查看老師獎金信息,按照降序排序后,每頁顯示3條,顯示第五頁?
-- M: (5-1)x3 =>M:12 N:3
SELECT name,comm
from teacher
ORDER BY comm desc
LIMIT 12,3;