目錄
一、理論
1.克隆表與清空表
2.SQL高級(jí)語(yǔ)句
3.SQL函數(shù)
4.SQL高級(jí)操作
5.MySQL中6種常見的約束
二、實(shí)驗(yàn)
?1.克隆表與清空表
2.SQL高級(jí)語(yǔ)句
3.SQL函數(shù)
4.SQL高級(jí)操作
5.主鍵表和外鍵表
?三、總結(jié)
一、理論
1.克隆表與清空表
克隆表:將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中。
(1)克隆表
①?先創(chuàng)建再導(dǎo)入
create table 新表 like 舊表;
insert into 新表 select * from 舊表;
例如:
create table test1 like students; #通過(guò) LIKE 方法,復(fù)制 info 表結(jié)構(gòu)生成 test01 表
insert into test1 select * from students; #導(dǎo)入數(shù)據(jù)
②?創(chuàng)建的時(shí)候同時(shí)導(dǎo)入
create table test2 (select * from students);
(2)清空表
清空表:刪除表內(nèi)的所有數(shù)據(jù)。
①delete刪除(自增長(zhǎng))
DELETE清空表后,返回的結(jié)果內(nèi)有刪除的記錄條目;DELETE工作時(shí)是一行一行的刪除記錄數(shù)據(jù)的;如果表中有自增長(zhǎng)字段,使用DELETE FROM 刪除所有記錄后,再次新添加的記錄會(huì)從原來(lái)最大的記錄 ID 后面繼續(xù)自增寫入記錄。
②truncate刪除(重新記錄)
TRUNCATE 清空表后,沒(méi)有返回被刪除的條目;TRUNCATE 工作時(shí)是將表結(jié)構(gòu)按原樣重新建立,因此在速度上 TRUNCATE 會(huì)比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表內(nèi)數(shù)據(jù)后,ID 會(huì)從 1 開始重新記錄。
truncate table 表名;
例如:
truncate table test1;
③創(chuàng)建臨時(shí)表(退出數(shù)據(jù)庫(kù)自動(dòng)銷毀)
臨時(shí)表創(chuàng)建成功之后,使用SHOW TABLES命令是看不到創(chuàng)建的臨時(shí)表的,臨時(shí)表會(huì)在連接退出后被銷毀。 如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用 DROP TABLE 語(yǔ)句手動(dòng)直接刪除臨時(shí)表。
##添加臨時(shí)表test3
create temporary table test3 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
show tables; ## 查看當(dāng)前庫(kù)中所有表
insert into test3 values(1,'zhangsan',123456789,'watch a film'); ##在臨時(shí)表中添加數(shù)據(jù)
select * from test3; ##查看當(dāng)前表中所有數(shù)據(jù)
quit ##退出數(shù)據(jù)庫(kù)
mysql -u root -p ##重新登錄后進(jìn)行查看
select * from test3; ##查看之前創(chuàng)建的臨時(shí)表中所有數(shù)據(jù),發(fā)現(xiàn)已經(jīng)被自動(dòng)銷毀
2.SQL高級(jí)語(yǔ)句
?
(1)select查詢語(yǔ)句
①select:顯示表格中的一個(gè)或者多個(gè)字段中所有的信息
#格式:select 字段名 from 表名;
#示例1:顯示數(shù)據(jù)表students的所有數(shù)據(jù)
select * from students;
#示例2:顯示數(shù)據(jù)表students的名字與年齡字段
select name,age from students;
②distinct查詢不重復(fù)記錄
#語(yǔ)法:select distinct 字段 from 表名﹔
#示例1:去除年齡字段中重復(fù)的
select distinct age from students;
#示例2:查找性別
select distinct gender from students;
③where根據(jù)條件查詢
#語(yǔ)法:select '字段' from 表名 where 條件
#示例:顯示name和age 字段 并且要找到age小于20
select name,age from students where age < 20;
④and且、or或:根據(jù)多個(gè)條件查詢
#語(yǔ)法:select 字段名 from 表名 where 條件1 (and|or) 條件2 (and|or)條件3;
#示例:顯示name和age 并且要找到age大于20小于30
select name,age from students where age >20 and age <30;
⑤in顯示已知值的資料
#語(yǔ)法:select 字段名 from 表名 where 字段 in ('值1','值2'....);
#示例1:顯示學(xué)號(hào)為1,2,3,4的學(xué)生記錄
select * from students where StuID in (1,2,3,4);
#示例2:顯示班級(jí)為1和3的學(xué)生記錄
select * from students where ClassID in (1,3);
⑥between:顯示兩個(gè)值范圍內(nèi)的資料
#語(yǔ)法:select 字段名 from 表名 where 字段 between '值1' and '值2';
包括 and兩邊的值
#示例1:顯示學(xué)生姓名在Ding Dian和Hua Rong中的學(xué)生記錄
select * from students where name between 'ding dian' and 'Hua Rong';
#示例2:顯示學(xué)生號(hào)碼id在2-5 的信息
select * from students where stuid between 2 and 5;
#示例3:顯示學(xué)生年齡在20-35之間的信息,不需要表中一定有該字段,只會(huì)將20到25 已有的都顯示出來(lái)
select * from students where age between 20 and 25;
⑦?like+通配符:模糊查詢
表1 like通配符
通配符 | 含義 |
% | 表示零個(gè),一個(gè)或者多個(gè)字符 |
_ | 下劃線表示單個(gè)字符 |
A_Z | 所有以A開頭 Z 結(jié)尾的字符串 'ABZ' 'ACZ' 'ACCCCZ'不在范圍內(nèi) 下劃線只表示一個(gè)字符 AZ 包含a空格z |
ABC% | 所有以ABC開頭的字符串 ABCD ABCABC |
%CBA | 所有以CBA結(jié)尾的字符串 WCBA CBACBA |
%AN% | 所有包含AN的字符串 los angeles |
_AN% | 所有 第二個(gè)字母為 A 第三個(gè)字母 為N 的字符串 |
#語(yǔ)法:select 字段名 from 表名 where 字段 like 模式
#示例1:查找名字以s開頭的學(xué)生記錄
select * from students where name like 's%';
#示例2:查找名字包含ong的學(xué)生記錄
select * from students where name like '%ong%';
#示例3:查找名字第二個(gè)字母為u,第三個(gè)字母為a的學(xué)生記錄
select * from students where name like '_ua%';
(8)order by按關(guān)鍵字排序
#語(yǔ)法:
select 字段名 from 表名 where 條件 order by 字段 [asc,desc];
#############################################################
asc :正向排序
desc :反向排序
######################默認(rèn)是正向排序##########################
#示例1:按學(xué)生的年齡正向排序顯示年齡和姓名字段
select age,name from students order by age;
#示例2:按學(xué)生的年齡反向排序顯示年齡和姓名字段
select age,name from students order by age desc;
#示例3:顯示name、age和classid字段的數(shù)據(jù) 并且只顯示classid字段為3 的 并且以age字段排序
select age,name,classid from students where classid=3 order by age;
3.SQL函數(shù)
(1)數(shù)學(xué)函數(shù)
表2 數(shù)學(xué)函數(shù)
函數(shù) | 含義 |
abs(x) | 返回x 的 絕對(duì)值 |
rand() | 返回0到1的隨機(jī)數(shù) |
mod(x,y) | 返回x除以y以后的余數(shù) |
abs(x) | 返回x 的 絕對(duì)值 |
rand() | 返回0到1的隨機(jī)數(shù) |
mod(x,y) | 返回x除以y以后的余數(shù) |
abs(x) | 返回x 的 絕對(duì)值 |
rand() | 返回0到1的隨機(jī)數(shù) |
mod(x,y) | 返回x除以y以后的余數(shù) |
abs(x) | 返回x 的 絕對(duì)值 |
rand() | 返回0到1的隨機(jī)數(shù) |
mod(x,y) | 返回x除以y以后的余數(shù) |
#示例1:返回-2的絕對(duì)值
select abs(-2);
#示例2:隨機(jī)生成一個(gè)數(shù)
select rand (1);
#示例3:隨機(jī)生成排序
select * from students order by rand();
#示例4:返回7除以2以后的余數(shù)
select mod(7,2);
#示例5:返回2的3次方
select power(2,3);
#示例6:返回離2.6最近的數(shù)
select round(2.6);
#返回離2.4最近的數(shù)
select round(2.4);
#示例7:保留2.335321的3位小數(shù)四舍五入后的值
select round(2.335321,2);
#示例8:返回?cái)?shù)字 2.335321 截?cái)酁?位小數(shù)的值
select truncate(2.335321,2);
#示例9:返回大于或等于2.335321 的最小整數(shù)
select ceil(2.335321);
#示例10:返回小于或等于 2.335321 的最大整數(shù)
select floor(2.335321);
#示例11:返回集合中最大的值
select greatest(1,4,3,9,20);
#示例12:返回集合中最小的值
select least(1,4,3,9,20);
(2)聚合函數(shù)
表3 聚合函數(shù)
函數(shù) | 含義 |
avg() | 返回指定列的平均值 |
count() | 返回指定列中非 NULL 值的個(gè)數(shù) |
min() | 返回指定列的最小值 |
avg() | 返回指定列的平均值 |
count() | 返回指定列中非 NULL 值的個(gè)數(shù) |
min() | 返回指定列的最小值 |
#示例1:求表中年齡的平均值
select avg(age) from students;
#示例2:求表中年齡的總和
select sum(age) from students;
#示例3:求表中年齡的最大值
select max(age) from students;
#示例4:求表中年齡的最小值
select min(age) from students;
#示例5:求表中有多少班級(jí)字段非空記錄
select count(classid) from students;
count(明確字段):不會(huì)忽略空記錄
#示例6:求表中有多少條記錄
select count(*) from students;
count(*)包含空字段,會(huì)忽略空記錄
#示例7:看空格字段是否會(huì)被匹配
insert into students values(26,' ',28,'f',1,8);
(3)字符串函數(shù)
表4 字符串函數(shù)
函數(shù) | 描述 |
trim() | 返回去除指定格式的值 |
concat(x,y) | 將提供的參數(shù) x 和 y 拼接成一個(gè)字符串 |
substr(x,y) | 獲取從字符串 x 中的第 y 個(gè)位置開始的字符串,跟substring()函數(shù)作用相同 |
substr(x,y,z) | 獲取從字符串 x 中的第 y 個(gè)位置開始長(zhǎng)度為z 的字符串 |
length(x) | 返回字符串 x 的長(zhǎng)度 |
replace(x,y,z) | 將字符串 z 替代字符串 x 中的字符串 y |
upper(x) | 將字符串 x 的所有字母變成大寫字母 |
lower(x) | 將字符串 x 的所有字母變成小寫字母 |
left(x,y) | 返回字符串 x 的前 y 個(gè)字符 |
right(x,y) | 返回字符串 x 的后 y 個(gè)字符 |
repeat(x,y) | 將字符串 x 重復(fù) y 次 |
space(x) | 返回 x 個(gè)空格 |
strcmp(x,y) | 比較 x 和 y,返回的值可以為-1,0,1 |
reverse(x) | 將字符串 x 反轉(zhuǎn) |
(1)?trim返回去除指定格式的值
語(yǔ)法:select trim (位置 要移除的字符串 from 字符串)
其中位置的值可以是
leading(開始)
trailing(結(jié)尾)
both(起頭及結(jié)尾)
#區(qū)分大小寫
要移除的字符串:從字符串的起頭、結(jié)尾或起頭及結(jié)尾移除的字符串,缺省時(shí)為空格。
#示例:從名字開頭的開始,移除Sun Dasheng中的Sun顯示
select trim(leading 'Sun' from 'Sun Dasheng');
(2)?length返回字符串的長(zhǎng)度
#語(yǔ)法:select length(字段) from 表名;
#示例:計(jì)算出字段中記錄的字符長(zhǎng)度
select name,length(name) from students;
(3)replace替代
#語(yǔ)法:select replace(字段,'原字符''替換字符') from 表名;
#示例:查看名字里包含ua的記錄
select name from students where name like '%ua%';
#將ua替換成hh顯示出來(lái)
select replace(name,'ua','hh') from students;
(4)concat將提供的參數(shù)拼接成一個(gè)字符串
#語(yǔ)法:select concat(字段1,字段2)from 表名
#示例:將name,classid字段拼接成一個(gè)字符串
select concat(name,classid) from students;
(5)?substr:根據(jù)要求截取長(zhǎng)度查看
#語(yǔ)法:select substr(字段,開始截取字符,截取的長(zhǎng)度) where 字段='截取的字符串'
#示例1:截取第6個(gè)字符往后
select substr(name,6) from students where name='Yue Lingshan';
#示例2:截取第6個(gè)字符往后的兩個(gè)字符
select substr(name,6,2) from students where name='Yue Lingshan';
4.SQL高級(jí)操作
(1)group by查詢結(jié)果進(jìn)行匯總分組
對(duì)group by 后面的字段的查詢結(jié)果進(jìn)行匯總分組,通常是結(jié)合聚合函數(shù)一起使用的;
group by 有一個(gè)原則,就是select 后面的所有列中,沒(méi)有使用聚合函數(shù)的列必須出現(xiàn)在 group by 的后面。
#語(yǔ)法:select 字段1,sum(字段2) from 表名 group by 字段1;
#示例1:求各個(gè)班的年齡總和
select classid,sum(age) from students group by classid;
#示例2:求各個(gè)班的平均年齡
select classid,avg(age) from students group by classid;
#示例3:根據(jù)年齡查看每個(gè)班的人數(shù)
select classid,count(age) from students group by classid;
(2)having過(guò)濾返回的記錄集
having:用來(lái)過(guò)濾由group by語(yǔ)句返回的記錄集,通常與group by語(yǔ)句聯(lián)合使用;
having語(yǔ)句的存在彌補(bǔ)了where關(guān)鍵字不能與聚合函數(shù)聯(lián)合使用的不足。如果被SELECT的只有函數(shù)欄,那就不需要GROUP BY子句;
要根據(jù)新表中的字段,來(lái)指定條件。
#語(yǔ)法:
select 字段1,SUM("字段")from 表格名 group by 字段1 having(函數(shù)條件);
#示例:查看各個(gè)班的平均年齡在30以上的班級(jí)
select classid,avg(age) from students group by classid having avg(age) > 30;
(3)as別名
欄位別名 表格別名。
#語(yǔ)法:
SELECT "表格別名"."欄位1" [AS] "欄位別名" FROM "表格名" [AS] "表格別名";
#示例:設(shè)置表名別名為f,基于班級(jí)號(hào)來(lái)統(tǒng)計(jì)各班年齡總和,sum(age)定義別名為total age
select f.classid,sum(age) 'total age' from students as f group by f.classid;
(4)連接查詢
準(zhǔn)備兩個(gè)表,此處兩個(gè)表分別為students和scores
①?inner join(等值相連):只返回兩個(gè)表中聯(lián)結(jié)字段相等的行
SELECT * FROM students A INNER JOIN scores B on A.stuid = B.stuid;
②?left join(左聯(lián)接):返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄
select * from scores A left join students B on A.stuid = B.stuid;
③?right join(右聯(lián)接):返回包括右表中的所有記錄和左表中聯(lián)結(jié)字段相等的記錄
select * from scores A right join students B on A.stuid = B.stuid;
(5)子查詢
連接表格,在WHERE 子句或HAVING 子句中插入另一個(gè)SQL語(yǔ)句
語(yǔ)法:SELECT "欄位1" FROM "表格1" WHERE "欄位2" [比較運(yùn)算符]
#外查詢
(SELECT "欄位1" FROM "表格1" WHERE "條件");
#示例:查詢學(xué)生學(xué)號(hào)為1的得分總和
select sum(score) from scores where stuid in (select stuid from students where stuid=1);
5.MySQL中6種常見的約束
(1)約束
表5 常見約束
序號(hào) | 約束類型 |
1 | 主鍵約束(primary key) |
2 | 外鍵約束(foreign key) |
3 | 非空約束(not null) |
4 | 唯一性約束(unique [key|index]) |
5 | 默認(rèn)值約束(default) |
6 | 自增約束(auto_increment) |
(2)外鍵
外鍵的定義:如果同一個(gè)屬性字段x在表一中是主鍵,而在表二中不是主鍵,
則字段x稱為表二的外鍵。
表6 主鍵表和外鍵表
類別 | 描述 | 備注 |
主鍵表 | 以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表) | 與外鍵關(guān)聯(lián)的主表的字段必須設(shè)置為主鍵。要求從表不能是臨時(shí)表, 主表外鍵字段和從表的字段具備相同的數(shù)據(jù)類型、字符長(zhǎng)度和約束。 |
外鍵表 | 以公共關(guān)鍵字作外鍵的表為外鍵表(從表、外表) |
二、實(shí)驗(yàn)
?1.克隆表與清空表
(1)克隆版
①先創(chuàng)建再導(dǎo)入
②創(chuàng)建的時(shí)候同時(shí)導(dǎo)入
(2)清空表
①?delete刪除(自增長(zhǎng))
?②?truncate刪除(重新記錄)
?③?創(chuàng)建臨時(shí)表(退出數(shù)據(jù)庫(kù)自動(dòng)銷毀)
2.SQL高級(jí)語(yǔ)句
(1)select:顯示表格中的一個(gè)或者多個(gè)字段中所有的信息
?顯示所有
?顯示數(shù)據(jù)表students的名字與年齡字段
?(2)distinct:查詢不重復(fù)記錄
去除年齡字段中重復(fù)的
查找性別
?
(3)where根據(jù)條件查詢
顯示name和age 字段 并且要找到age小于20
(4)?and且、or或 根據(jù)多個(gè)條件查詢
(5)?in顯示已知值的資料
顯示學(xué)號(hào)為1,2,3,4的學(xué)生記錄
?顯示班級(jí)為1和3的學(xué)生記錄
?(6)between顯示兩個(gè)值范圍內(nèi)的資料
顯示學(xué)生姓名在Ding Dian和Hua Rong中的學(xué)生記錄
?顯示學(xué)生號(hào)碼id在2-5 的信息
?顯示學(xué)生年齡在20-35之間的信息,不需要表中一定有該字段,只會(huì)將20到25 已有的都顯示出來(lái)
?(7)like+通配符 模糊查詢
查找名字以l開頭的學(xué)生記錄
查找名字包含ang的學(xué)生記錄
?
?查找名字第二個(gè)字母為i,第三個(gè)字母為a的學(xué)生記錄
?(8)order by:按關(guān)鍵字排序
按學(xué)生的年齡正向排序顯示年齡和姓名字段
?按學(xué)生的年齡反向排序顯示年齡和姓名字段
?顯示name、age和classid字段的數(shù)據(jù) 并且只顯示classid字段為1 的 并且以age字段排序
3.SQL函數(shù)
數(shù)學(xué)函數(shù)
(1)返回-2的絕對(duì)值
(2)?隨機(jī)生成一個(gè)數(shù)
?
?(3)隨機(jī)生成排序
(4)返回7除以2以后的余數(shù)
?
?(5)返回2的3次方
?(6)返回離2.6最近的數(shù)
(7)返回離2.4最近的數(shù)
?(8)保留2.335321的3位小數(shù)四舍五入后的值
?
?(9)返回?cái)?shù)字 2.335321 截?cái)酁?位小數(shù)的值
?(10)返回大于或等于2.335321 的最小整數(shù)
?(11)返回小于或等于 2.335321 的最大整數(shù)
?(12)返回集合中最大的值
?(13)返回集合中最小的值
聚合函數(shù)
(14)求表中年齡的平均值
?
?(15)求表中年齡的總和
?(16)求表中年齡的最大值
(17)求表中年齡的最小值
?
(18)求表中有多少班級(jí)字段非空記錄
?
(19)求表中有多少條記錄
?
(20)看空格字段是否會(huì)被匹配
?
字符串函數(shù)
?(21)從名字開頭的開始,移除Sun Dasheng中的Sun顯示
(22)計(jì)算出字段中記錄的字符長(zhǎng)度
(23)查看名字里包含an的記錄
?
?(24)將an替換成hh顯示出來(lái)
?
(25)將name,classid字段拼接成一個(gè)字符串
?
(26)截取第3個(gè)字符往后
?
?(27)截取第2個(gè)字符往后的兩個(gè)字符
4.SQL高級(jí)操作
(1)group by查詢結(jié)果進(jìn)行匯總分組
求各個(gè)班的年齡總和
?求各個(gè)班的平均年齡
?根據(jù)年齡查看每個(gè)班的人數(shù)
(2)having過(guò)濾返回的記錄集
查看各個(gè)班的平均年齡在22以上的班級(jí)
(3)as別名
(4)連接查詢
創(chuàng)建scores表
?inner join(等值相連)只返回兩個(gè)表中聯(lián)結(jié)字段相等的行
?left join(左聯(lián)接)返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄
?right join(右聯(lián)接)返回包括右表中的所有記錄和左表中聯(lián)結(jié)字段相等的記錄
(5)子查詢
查詢學(xué)生學(xué)號(hào)為1的得分總和
5.主鍵表和外鍵表
(1)創(chuàng)建主表和從表
(2)為主表master添加一個(gè)主鍵約束
?(3)為從表slave表添加外鍵
?(4)使用查詢表語(yǔ)句結(jié)構(gòu)命令查看外鍵關(guān)聯(lián)
?(5)插入新的數(shù)據(jù)記錄時(shí),要先主表再?gòu)谋?/p>
?(6)刪數(shù)數(shù)據(jù)記錄時(shí),要先從表再主表,也就是說(shuō)刪除主鍵表時(shí)必須先刪除其他與之關(guān)聯(lián)的表。
drop tables slave;
drop tables master;
(7)要?jiǎng)h除外鍵約束字段先刪除外鍵約束,再刪除外鍵名
?三、總結(jié)
克隆表將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中.
清空表刪除表內(nèi)的所有數(shù)據(jù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-547392.html
group by查詢結(jié)果進(jìn)行匯總分組,having用來(lái)過(guò)濾由group by語(yǔ)句返回的記錄集,通常與group by語(yǔ)句聯(lián)合使用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-547392.html
到了這里,關(guān)于數(shù)據(jù)庫(kù)應(yīng)用:MySQL數(shù)據(jù)庫(kù)SQL高級(jí)語(yǔ)句與操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!