柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQL常用語(yǔ)句大全
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQL常用語(yǔ)句大全
我們?cè)谶M(jìn)行開(kāi)發(fā)工作時(shí),對(duì)數(shù)據(jù)庫(kù)的操作是必不可少的,熟練掌握SQL語(yǔ)句可以讓我們對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)處理變得非常簡(jiǎn)單,所以學(xué)習(xí)SQL語(yǔ)句是非常有必要的,下面匯總了一些常用的SQL語(yǔ)句
SQL語(yǔ)句的類型
DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言
DML(Data Manipulation Language)數(shù)據(jù)操作語(yǔ)言
DQL(Data Query Language)數(shù)據(jù)查詢語(yǔ)言
DCL(Data Control Language)數(shù)據(jù)控制語(yǔ)言
DDL
DDL是數(shù)據(jù)定義語(yǔ)言,主要是對(duì)數(shù)據(jù)庫(kù)和數(shù)據(jù)表的操作
(1)操作數(shù)據(jù)庫(kù)
--創(chuàng)建庫(kù)
create database 庫(kù)名;
--創(chuàng)建庫(kù)時(shí)判斷庫(kù)是否存在,不存在則創(chuàng)建
create database if not exists 庫(kù)名;
--查看所有數(shù)據(jù)庫(kù)
show databases;
--使用指定數(shù)據(jù)庫(kù)
use 庫(kù)名;
--查看當(dāng)前指定數(shù)據(jù)庫(kù)包含的數(shù)據(jù)表
show tables;
--查看數(shù)據(jù)庫(kù)的結(jié)構(gòu)定義信息
show create database 庫(kù)名;
--刪除數(shù)據(jù)庫(kù)
drop database 庫(kù)名;
--修改數(shù)據(jù)庫(kù)的字符集為utf8
alter database 庫(kù)名 character set utf8;
(2)操作數(shù)據(jù)表
--創(chuàng)建表
create table 表名(
字段1 類型1,
字段2 類型2,
字段3 類型3,
...........
);
--查看表結(jié)構(gòu)
desc 表名;
--查看創(chuàng)建表的SQL語(yǔ)句
show create table 表名;
--修改表名
alter table 表名 rename to 新的表名;
--添加一個(gè)新的字段
alter table 表名 add 字段; 字段類型;
--修改字段名
alter table 表名 rename column 字段名 to 新的字段名;
--修改字段類型(注意類型修改前后數(shù)據(jù)是否兼容)
alter table 表名 modify column 字段名 新的字段類型;
--刪除一個(gè)字段
alter table 表名 drop 字段名;
--刪除表
drop table 表名;
--刪除表時(shí)判斷表是否存在,若存在則刪除
drop table if exists 表名;
DML
DML是數(shù)據(jù)操作語(yǔ)言,主要是對(duì)數(shù)據(jù)表的操作
(1)插入數(shù)據(jù)(insert into)
數(shù)據(jù)表插入數(shù)據(jù)分為全字段插入數(shù)據(jù)和部分字段插入數(shù)據(jù)
①全字段插入數(shù)據(jù)(有兩種方法,推薦第一種方法)
--有多少個(gè)字段,就要寫(xiě)多少個(gè)值,且是一一對(duì)應(yīng)的
insert into 表名 values(值1,值2,值3...值n);
--此方法要寫(xiě)出所有字段,并一一對(duì)應(yīng)插入值
insert into 表名(字段1,字段2...字段n) values(值1,值2...值n);
②部分字段插入數(shù)據(jù)
--部分字段插入數(shù)據(jù),只寫(xiě)需要插入數(shù)據(jù)的字段名
insert into 表名(字段1,字段2...) values(值1,值2...);
(2)刪除數(shù)據(jù)(delete / truncate)
--刪除表中所有數(shù)據(jù)
delete from 表名;
--刪除表中指定的數(shù)據(jù)
delete from 表名 where 字段 = 值;
--刪除表中所有數(shù)據(jù)(先刪除整張表,然后創(chuàng)建一張一樣的空表,此方法更高效)
truncate table 表名;
(3)修改數(shù)據(jù)(update)
--無(wú)限制條件的修改,會(huì)修改整張表
update 表名 set 字段 = 值;
--有限制條件的修改,只修改特定記錄
update 表名 set 字段 = 值 where 條件(字段 = 值);
?DQL
DQL是數(shù)據(jù)查詢語(yǔ)言,主要就是select配合其他限制條件的關(guān)鍵字進(jìn)行查詢
(1)無(wú)條件查詢
--查詢表中所有數(shù)據(jù)
select *from 表名;
(2)查詢?cè)?..到...之間(between and / && / and)
--查詢users表中年齡在18~25歲之間的記錄
--方式1 between..and..
select *from users where age between 18 and 25;
--方式2 &&
select *from users where age>=18 && age<=25;
--方式3 and
select *from users where age>=18 and age<=25;
(3)指定條件查詢
①單個(gè)條件(or?/ in)
--查詢users表中年齡為18,20,25歲的記錄
--方式1 or
select *from users where age=18 or age=20 or age=25;
--方式2 in
select *from users where age in(18,20,25);
②多個(gè)條件(and)
--查詢users表中年齡為23,性別為女,名字為小楠的記錄
select *from users where age=23 and gender='女' and name='小楠';
(4)查詢不為NULL值(is not null),為NULL值(is null)
--查詢users表中序號(hào)不為空的記錄
select *from users where id is not null;
--查詢user表中序號(hào)為空的記錄
select *from users where id is null;
(5)模糊查詢(like)
_:單個(gè)任意字符
%:多個(gè)任意個(gè)字符
--查詢users表中姓名第一個(gè)字為李的記錄
select *from users where name like '李%';
--查詢users表中姓名第二個(gè)字為李的記錄
select *from users where name like '_李%';
--查詢users表中姓名含有李字的記錄
select *from users where name like '%李%';
--查詢users表中姓名是兩個(gè)字的記錄
select *from users where name like '__';
(6)去除重復(fù)記錄查詢(distinct)
--查詢users表中所在城市不相同的記錄
--select distinct 字段 from 表名;
select distinct city from users;
(7)排序查詢(order by)
①單個(gè)條件
--查詢users表中記錄,并以年齡升序排序
select *from users order by age; --默認(rèn)升序
--查詢users表中記錄,并以年齡降序排序
select *from users order by age desc;--desc降序
②多個(gè)條件
注意:多個(gè)排序條件時(shí),只有當(dāng)?shù)谝粋€(gè)排序條件值一樣,才會(huì)執(zhí)行第二個(gè)排序條件,以此類推
--查詢users表中記錄,并體育成績(jī)降序,年齡降序
select *from users order by PE desc,age desc;
(8)聚合函數(shù)
①計(jì)算和(sum)
select sum(字段) (as sumvalue) from 表名;
②計(jì)算最大值(max)
select max(字段) (as maxvalue) from 表名;
③計(jì)算最小值(min)
select min(字段) (as minvalue) from 表名;
④計(jì)算平均值(avg)
select avg(字段) (as avgvalue) from 表名;
⑤計(jì)算個(gè)數(shù)(count)
select count(字段) (as totalcount) from 表名;
(9)分組查詢(group?by)
--查詢users表中的記錄,按照性別分組,查詢男,女的體育成績(jī)平均分
select gender,avg(PE) from users group by gender;
--查詢users表中的記錄,按照性別分組,分別查詢男、女的體育成績(jī)平均分,人數(shù)
select gender, avg(PE),count(id) from users group by gender;
--查詢users表中的記錄, 按照性別分組,分別查詢男、女的體育成績(jī)平均分,人數(shù) 要求:分?jǐn)?shù)低于60分的人,不參與分組
select gender, avg(PE),count(id) from users where PE > 60 group by gender;
--查詢users表中的記錄,按照性別分組,分別查詢男、女的體育成績(jī)平均分,人數(shù) 要求:分?jǐn)?shù)低于60分的人,不參與分組,分組之后,人數(shù)要大于2個(gè)人
select gender,avg(PE),count(id) from users where PE > 60 group by gender having count(id)>2;
(10)分頁(yè)查詢(limit)
注意:第一條記錄的索引是0
--查詢users表中的前10行條記錄
select *from users limit 10;
--查詢users表中第2~11條記錄 (從第2條記錄開(kāi)始累加10條記錄)
select *from users limit 1,10;
--查詢users表中第5~17條記錄 (從第5條記錄開(kāi)始累加13條記錄)
select *from users limit 4,13;
(11)內(nèi)連接查詢
如果查詢數(shù)據(jù)的來(lái)源來(lái)自多張表,則必須對(duì)這些表進(jìn)行連接查詢,連接是把不同表的記錄連到一起的最普遍的方法,通過(guò)連接查詢可將多個(gè)表作為一個(gè)表進(jìn)行處理,連接查詢分為內(nèi)連接和外連接
語(yǔ)法格式
--語(yǔ)法1 (隱式內(nèi)連接)
select 字段1,字段2...
from 表1,表2...
where 過(guò)濾條件;
--語(yǔ)法2 (顯式內(nèi)連接)
select 字段1,字段2...
from 表1 inner join 表2 ...
on 過(guò)濾條件;
例如這里有兩張表: user表和city表
?重合的部分就叫做內(nèi)連接查詢,例如下面過(guò)濾條件指的就是當(dāng)兩個(gè)表的id相等時(shí)才符合連接查詢的條件
隱式內(nèi)連接
顯式內(nèi)連接
?(12)外連接查詢
外連接查詢分為左外連接查詢和右外連接查詢
語(yǔ)法
--左外連接
select 字段1,字段2..
from 表1 left (outer) join 表2 on 過(guò)濾條件;
--右外連接
select 字段1,字段2..
from 表1 right (outer) join 表2 on 過(guò)濾條件;
區(qū)別如下
左外連接:是表1和表2的交集再并上表1的其他數(shù)據(jù)
右外連接:是表1和表2的交集再并上表2的其他數(shù)據(jù)
舉個(gè)例子,例如還是上面兩張表,user表和city表
左外連接結(jié)果
右外連接結(jié)果
看到結(jié)果大家明白左,右外連接的區(qū)別了嗎,在實(shí)際應(yīng)用中,我們要結(jié)合實(shí)際的需求來(lái)決定使用左外連接還是右外連接
??(13)子查詢
子查詢:其實(shí)就是查詢語(yǔ)句中嵌套查詢語(yǔ)句
例如還是剛才的user表,只不過(guò)新增了一個(gè)字段age
問(wèn)題:查找出表中年齡最大的那個(gè)人的那條記錄
常規(guī)想法:
①先計(jì)算出年齡最大的值?
②根據(jù)已知年齡的最大值查找相關(guān)記錄
這樣需要兩條sql語(yǔ)句,甚至如果遇到更復(fù)雜的問(wèn)題,需要更多sql語(yǔ)句
利用子查詢:
而子查詢只需要用一條sql語(yǔ)句就夠了?
子查詢的查詢結(jié)果是可以作為判斷條件的
如果子查詢結(jié)果是單行單列的,可以用運(yùn)算符做判斷條件:< <= > >= =
例如還是user表,查找小于最大年齡的所有記錄
如果子查詢結(jié)果是多行單列的,可以用運(yùn)算符in做判斷條件
子查詢查找出了最小年齡者的姓名,然后作為判斷條件輸出這些人的記錄
DCL
(1)管理用戶
①添加用戶
create user '用戶名'@'主機(jī)名' identified by '密碼';
②刪除用戶
drop user '用戶名'@'主機(jī)名';
?(2)權(quán)限管理
?①查詢權(quán)限
show grants for '用戶名'@'主機(jī)名';
②授予權(quán)限
--語(yǔ)法
grant 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 to '用戶名'@'主機(jī)名';
--授予faker用戶所有權(quán)限,在任意數(shù)據(jù)庫(kù)任意表上
grant all on *.* to 'faker'@'localhost';
③撤銷權(quán)限
--語(yǔ)法
revoke 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 from '用戶名'@'主機(jī)名';
--撤銷faker用戶對(duì)test數(shù)據(jù)庫(kù)中city數(shù)據(jù)表的權(quán)限
revoke update on test.city from 'faker'@'localhost';
看完文章對(duì)你有幫助的話,就點(diǎn)個(gè)贊吧~
點(diǎn)贊關(guān)注收藏是對(duì)我最大的支持~?
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQL常用語(yǔ)句大全
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。