1. 程式人生 > >MySQL資料庫DQL操作

MySQL資料庫DQL操作

MySQL資料庫操作DQL操作

1.DQL操作不會對資料進行改變,而是讓資料庫傳送結果集給客戶端;查詢返回的結果集是一張虛擬表。

①基礎查詢

1.查詢所有列:select * from 資料表名; 例子: 查詢學生所有記錄  select * from stu;

2.查詢指定列:select 欄位1,欄位2,欄位3 from 資料表名;例子: 查詢所有學生學號,姓名,性別 select id,name sex from stu;

②條件查詢 where關鍵字

select 列名 from 資料表名 where 欄位1=待定值 例子:查詢學號為2的學生記錄 select * from stu where id=2;

在where語句中的關鍵字:

並且 ->and  例子:查詢性別為女並且年齡為50的記錄 select * from stu where sex=女 and age=50;

或者 ->or  例子:查詢學號為S_1001或者姓名為李四的記錄 select * from where id=S_1001 or name=李四;

在....中查詢->in() ; 例子:查詢學號為S_1001,S_1002,S_1003的記錄 select * from where id in(S_1001,S_1002,S_1003);

不在.....中查詢->not in();  例子:查詢學號不是S_1001,S_1002,S_1003的

查詢....為null值-> is null; 例子:

在.....之間查詢->between....and; 例子: 查詢年齡在20到40之間的學生記錄 select * from stu where age between 20 and 40;

查詢非-> !=或者<>或者not;例子:查詢性別非男的學生記錄 ①select * from stu where sex!=男  ② select * from stu where sex=<>男  ③ select * from stu where not sex=男;

查詢不為null值-> is not null;例子:查詢性別不為null的學生記錄 ①select *from stu where sex is not null; ② select * from stu where not sex  is null;  

③模糊查詢

模糊查詢關鍵字like;萬用字元 _任意一個字元;%任意n個字元

select * from 資料表名 where 欄位1 like _或者%

例子:查詢姓名由5個字母組成的學生記錄

select * from where name like _____;

④欄位控制查詢

1.去除重複記錄 distinct關鍵字 例子 通常員工所得的工資或許相同但又不想篩選重複的相同工資值這時可以採用distinct關鍵字將相同工資的去除 select distinct sal from 資料表名 ;

例子:查詢所有不重複的名字的學生記錄 select distinst name from stu;

2.查詢結果XXX之和(與給列名新增別名相結合)  例子:查詢月薪和佣金之和 select * ,sal+comm as tatal from 資料表名 where 條件;

例子:

⑤排序查詢

1.升序排序  關鍵字 order by 欄位 asc   select * from 資料表名  order by 欄位 asc;例子:查詢學生的所有記錄,按年齡升序排序 例子:select * from stu order by age asc;

2.降序排序   關鍵字 order by 欄位  desc select * from 資料表名 order by 欄位 desc;例子:查詢學生的所有記錄,按年齡降序排序 例子:select * from stu order by age desc; 

3.聚合函式  MAX,MIN,AVG,COUNT

MAX例子:查詢學生的最高分數 select  max(grade) from stu;

MIN例子:查詢學生的最低分數  select min(grade)   from stu;

AVG例子:查詢學生的平均成績  select avg(grade)  from stu;

COUNT例子 :查詢學生的擁有成績的人數 select count(grade) as cnt from stu;

⑥分組查詢  關鍵字 group by having  例子 1.查詢每個班的班名和人數 學生記錄 select classid ,count(*) from stu group by classid; 

2.查詢每個班的班名及分數在90以上的總人數的學生記錄 select classid,count(*) from stu where grade>90 group by classid;

3.查詢總分大於300的班級以及班級總分 select classid,sum(grade) from stu group by classid having sum(grade)>300;

havaing和where 區別

having是在分組後的資料進行過濾

where是在分組錢的資料進行過濾

4.限制查詢 關鍵字 limit  例子:查詢5行記錄,記錄從0行開始 select * from stu where litmit 0,5;

5.資料的完整性

主鍵約束 :primary key 例子:id int primary key;

唯一約束:unique 例子:name varchar(10) unique;

自動增長列:auto_increment 例子: id int primary key auto_increment;

非空約束:not null;例子:message varchar(50) not null;

預設值約束:default 例子: grade double default 0.0;

外來鍵約束:foreign  key;例子 ①id int ;foreign key id refrence stu(id); 

② alter table s add foreign key(sid) references student(id);

enum約束:例子:sex enum(男,女);

⑦多表查詢

合併結果集 :合併結果集就是把兩個select語句的查詢結果合併到一起

1.union  去除重複記錄   例子:將學生表和s表做不重複的連線 select * from stu union select * from s;

2.union all 不去除重複記錄 例子:將學生表和s表做重複的連線 select * from stu union all selct * from s;

要求:被合併的兩個結果集列數,列型別要一致(兩個表之間的列數  列型別要一致);

連線查詢

1.內連線 

例子:在學生表和成績表中查詢所有記錄:select  * from stu,grade where stu.subject=grade.subject;(笛卡爾積應用)

例子:指定要查詢的列:在學生表和成績表中查詢學生的學號和姓名的記錄: select stu.id,stu.name from stu,grade where stu.subject=grade.subject;

例子:為表指定別名,然後在引用列時使用別名即可:在學生表和成績表中查詢學生的學號和姓名的記錄 select s.id,s.name from stu as s,grade as g where s.subject=g.subject;

標準內連線 例子: select * from  stu as s inner join grade as g on s.subject=g.subject; 

2.外連線(左連線,右連線)

左連線:左連線是先查詢出左表(即以左表為主),然後查詢右表,右表中滿足條件的顯示出來,不滿足條件的顯示NULL

例子:select * from stu as s left outer join grade as g on s.subject=g.subject;

右連線:右連線就是先把右表中所有記錄都查詢出來,然後左表滿足條件的顯示,不滿足顯示NULL

例子:selelect * from stu as s right outer join grade as g on s.subject=g.subject;

3.自然連線  :連線查詢會產生無用笛卡爾積,我們通常使用主外來鍵關係等式來去除它。而自然連線無需你去給出主外來鍵等式,它會自動找到這一等式  NATURAL

例子:內連線 select * from stu as s natural join grade as g;

例子:右連線 select * from stu as s natural right join grade as g;

例子:左連線 select *from stu as s natural left join grade as g;

4.子查詢:

一個select語句中包含另一個完整的select語句,子查詢就是巢狀查詢,即SELECT中包含SELECT,如果一條語句中存在兩個,或兩個以上SELECT,那麼就是子查詢語句了

例子:查詢工資高於JSONS的員工記錄: select * from emp where sal>(select sal from emp where name='JSONS');

例子:查詢工資高於30號部門所有人的的員工資訊 select * from emp where sal>all(select sal from  emp where departno=30);當子查詢結果集形式為多行單列時可以使用ALLANY關鍵字

例子:查詢工作和工資與MARTIN完全相同的員工資訊 select * from emp where (sal,job) in(select sal,job from emp where name='MARTIN');

5.自連線:自己連線自己取別名

 

2.資料庫的匯出和恢復

①匯出:mysqldump –u使用者名稱 –p密碼 資料庫名>生成的指令碼檔案路徑 例子:mysqldump -root -p123 stu>d:\stu.sql;

②恢復:前提:必須建立資料庫名

方法①

連線資料庫

例子:mysql>source d:\stu.sql;

方法②

mysql –u使用者名稱 –p密碼 資料庫<要執行指令碼檔案路徑

例子;mysql -uroot -p123 stu<d:\stu.sql;

注意:資料庫DQL操作執行語句from->where->group by->having->select->order by->limit