一、 一層嵌套子查詢 --查詢出來結果只有一張表
內查詢結果=some()
內查詢結果=any()
內查詢結果 in()
1)Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果 =(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
2)當內查詢結果是多個值的時候,這個時候須要用in來替換=:
Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果in(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
3)又或者是在=後面加上some或者 any;
Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果 =some/any(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
例1: select sname from student
where sno=(select sno from course where cname=‘yuwen’and cpoint>90);
例2:select sname from student where sno =(select sno from course where cpoint >90) or (select sno from student where sage >23);mysql
二、普通鏈接 --查詢出來結果是兩張表
Select * from 表1,表2 where 表1.A=表2.A and 題目裏面所給的條件;
(* 表明題目最後查詢的結果,兩個表的鏈接屬性)
例1:select s.sname,c.sno from student s,course.c
where s.sno=c.sno and c.cname=’yuwen’ and c.cpoint>90;
例2: select s.sname,c.sno from student.s,course.c
where s.sno=c.sno and c. cpoint >90 or s.age>23;
三、鏈接語句 ----join…on
select * from 表1 join 表2 on 表1.A=表2.A where (咱們題目給出的條件)你的條件 and 你的另一個條件;
select * from student join course on student.sno=course.sno where
course.cname=’shuxue’ and course.cpoint>80;正則表達式
三、聚合函數
1)AVG() –返回指定列的平均值
2) COUNT() --返回指定列中非null值的個數
3) MIN() --返回指定列的最小值
4) MAX() --返回指定列的最大值
5)SUM() --返回指定列的全部值之和sql
四、navicat轉化爲sql文件:
右擊點擊表名—轉儲sql文件—數據和結構數據庫
五、 Group by
例1:select gender ,COUNT(*)from score group by gender;服務器
六、 Group by….having
Select 分組列名,count(*) from 表名 group by 分組列名 having 條件;
例:select name from student group by id having shuxue>80;函數
七、正則表達式
符號匹配 類似查詢
regexp
以s開頭:‘^s’;
以n結尾:‘n$’
包含: ‘a’ –包含a的字母
匹配任意全部的(除了\n不能匹配其他都能匹配):‘.’
\n:換行spa
例:
Andy
Asdy
Csdy
直接匹配:‘dy’ ‘(an|as|cs|)dy’
在選的東西之中選擇相同之處,進行提取;regexp
八、索引:
1)Index --查詢速度很快
主鍵是惟一的但不容許有空;
Unique:索引列的值必須惟一,但容許有空值
2)create index 索引名 on 表名(列名(長度));--建立索引
例:create index gender on score (gender);--建議索引名與你要創建的索引的列名保持一致,方便查找
3)alter table 表名 add index 索引名(列名); --添加索引
例:alter table score add index name(name);
4)create table 表名(列名1 數據類型 約束,
列名2 數據類型 約束,
Index 索引名 (列名));--建立表的時候直接指定索引
例:create table xihaifeng(
id int ,name varchar(20),
gender VARCHAR(20),
age int ,
index name(name));
5)drop index 索引名 on 表名; --刪除索引名
Alter table 表名 drop index 索引名; --刪除索引名
6)create unique index 索引名 on 表名(列名);--建立惟一索引
例:create unique index grade on score(grade);
7)alter table 表名 add unique 索引名 (列名); --增長惟一索引
例:alter table score add unique name(name);
8)create table 表名(列名1 數據類型 約束,
列名2 數據類型 約束,
unique 索引名 (列名));--建立表的時候直接指定惟一索引
例:create table xihaifeng(
id int ,name varchar(20),
gender VARCHAR(20),
age int ,
unique name(name));
九、建立臨時表:
例:CREATE TEMPORARY TABLE SalesSummary (
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
); --該表在退出mysql的時候會銷燬,若是你想主動刪除,步驟和普通表同樣。
十、常見命令:
例:select version(); --查看服務器版本信息
Select database(); --查看當前數據庫名(或返回空)
Select user(); --查看當前用戶名
Show status; --服務器狀態
Show variables; --服務器配置變量
十一、mysql的序列化
1)自動增加 --auto_increment
例:create table xihaifeng2(
id int not null auto_increment,
name varchar(20),
unique id(id)
);
insert into xihaifeng2(id,name) VALUES(null,'zhangsan');
注:當id爲自動化增加時,能夠不輸入id地址,插入數據時直接輸入null,由於會自動生成;
2)重置序列 --刪除了數據表中的多條記錄,並但願對剩下數據的auto_increment 列進行從新排列,能夠經過刪除自增的列,而後從新添加來實現。
例:alter table score drop id; --刪除自增加
Alter table score add id int (unsigned) not null auto_increment first,add primary key(id); --添加自增加,並設置爲主鍵,通常狀況下,主鍵爲自增加
十二、自增加的初始值
例:create table score(
Id int (unsigned) not null auto_increment ,
Primary key (id),
Name varchar (30) not null,
Date date not null,
Origin varchar(30) not null)
Auto_increment =100 charset=utf8; --初始值設置爲100;索引
1三、多表查詢
1)使用select子句進行多表查詢
Select 列名 from 表1,表2 where 表1.A=表2.A and 其餘查詢條件;
例:select name from student s,teacher t where s.id=t.id and s.age >18;
--兩個表進行關聯,以兩張表的id字段信息相同做爲條件創建兩表關聯
2)合併多個結果集
-- 將多個select語句的查詢結果合併輸出,並刪除重複行;
select id from aaa union (distinct) select id from bbb;
--將多個select語句的查詢結果合併輸出,但不會刪除重複行
select id from aaa union all select id from bbb;
3)簡單嵌套查詢
內鏈接:把查詢結果做爲where子句的查詢條件;
--返回單個值且嵌套在select、insert、update、delete語句或其餘查詢語句中,任何可使用表達式的地方均可以使用子查詢。
例:select name from student where id in(select id from teacher where age=23);
4)多層嵌套:(最多嵌套32層)複雜的select語句查詢
Select語句 in{select語句 in{select語句 in{……}}};
--多表嵌套查詢的原理:不管是多少張表進行嵌套,表與表之間必定存在某種關聯,經過where子句創建此種關聯實現查詢;
5)嵌套查詢的應用:
>any --大於子查詢中的某個值
>=any --大於等於子查詢中的某個值
<=any --小於等於子查詢中的某個值
=any --等於子查詢中的某個值
!=any/<>any --不等於子查詢中的某個值
>all --大於子查詢中的全部值
>=all --大於等於子查詢中的全部值
<=all --小於等於子查詢中的全部值
=all --等於子查詢中的全部值
!=all/<>all --不等於查詢中的全部值rem
內查詢結果=some()/內查詢結果=any():(關鍵詞or)
假設any內部的查詢語句返回的結果個數是三個,那麼select* from表名 where a>結果1 or a>結果2 or a>結果3;
內查詢結果 in()
內查詢結果all():
假設any內部的查詢語句返回的結果個數是三個,那麼select* from表名 where a>結果1 and a>結果2 and a>結果3;
Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果 =(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
當內查詢結果是多個值的時候,這個時候須要用in來替換=:
Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果in(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
又或者是在=後面加上some或者 any;
Select 最後要查出來的結果 from 最後要查出來的結果所在表
Where 內查詢結果 =some/any(
Select 內查詢結果 from 另外一張表 where 題目所給的條件(內查詢條件)
);
例1: select sname from student
where sno=(select sno from course where cname=‘yuwen’and cpoint>90);
例2:select sname from student where sno =(select sno from course where cpoint >90) or (select sno from student where sage >23);
6)使用子查詢作表達式
--子查詢的結果做爲一個表達式
例:select (select avg(yuwen)from cj),(select avg(shuxue)from cj),(select avg(yingyu)from cj)from cj;
--在使用子查詢時最好爲列表項取個別名;
例:select (select avg(yuwen)from cj)as yuwen,(select avg(shuxue)from cj) as shuxue,(select avg(yingyu)from cj) as yingyu from cj;
7) join 查詢
(inner)join—內鏈接查詢
例:select name from aaa join bbb on aaa.id=bbb.id where score=90;
Left join—左鏈接 左表aaa是主表,完整的,右表是貼上去的,能夠不完整
例:select name from aaa join bbb on aaa.id=bbb.id ;
Right join—右鏈接 右表bbb是主表,完整的,左表是貼上去的,能夠不完整例:select name from aaa join bbb on aaa.id=bbb.id ;