1. 環境:windows,MySQL Server 5.5,Navicat forMySQL
2. Mysql常用sql語句
SQL分類:
DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先介紹基礎語句:
2.1創建數據庫
CREATE DATABASE database-name
2.2刪除數據庫
drop database dbname
2.3備份sql server
---創建備份數據的device
USE master EXEC sp_addumpdevice ‘disk’,’testBack’,’c:mssql7backupMyNwind_1.dat’
---開始備份
BACKUP DATABASE pubs TO testBack
2.4創建新表
create table tabname(col1 type1[notnull][primary key],col2 type2[not null])
根據已有的表建立新表
2.4A:create table tab_new liketab_old(使用舊表創建新表)
2.4B:create table tab_new as selectcol1,col2…from tab_old definition only
2.5刪除表
Drop table tabname
2.6為表添加一列
Alter table tabname add column coltype 注:列增加後將不能刪除
2.7添加主鍵/刪除主鍵
Alter table tabname add primarykey(col)
Alter table tabname drop primarykey(col)
2.8添加索引/刪除索引
Create [unique] index idxname ontabname(col…)
drop index idxname
2.9 創建視圖/刪除視圖
create view viewname as select statement
drop view viewname
2.10常用的基本sql語句
查找:select * fromtable1 where 范圍
插入:insert intotable1(field1,field2) values(value1,value2)
刪除:delete fromtable1 where 范圍
更新:update table1set field1=value1 where 范圍
模糊查詢:select *from table1 where field1 like ‘%value1%’
排序:select * fromtable1 order by field1,field2[desc]
總數:selectcount(*) as totalcount from table1
求和:selectsun(field1) as sunvalue from table1
平均:selectavg(field1) as avgvalue from table1
最大:selectmax(field1) as maxvalue from table1
最小:selectmin(field1) as minvalue from table1
2.11幾個常用高級查詢運算符
2.11A:UNION運算符
UNION運算符通過組合其他兩個結果表(例如table1和table2)並消去表中任何重復行而派生出一個結果表。當ALL與UNION一起使用時(即UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自table1就是table2。
2.11B:EXCEPT運算符
EXCEPT運算符通過包括所有在table1中但不再table2中的行並消除所有重復行而派生出的一個結果表。當ALL隨EXCEPT一起使用時(EXCEPT ALL),不消除重復行。
2.11C:INTERSECT運算符
INTERSECT運算符通過至包括table1和table2中都有的行並消除所有重復行而派生出一個結果表。當ALL隨INTERSECT一起使用時(INTERSECT ALL),不消除重復行。
2.12使用外連接
2.12A:left outer join
左外連接:結果集包括連接表的匹配行,也包括做連接表的所有行
SQL:select a.a,a.b,a.c,b.c,b.d,d.f from a LEFT OUT JOIN b ON a.a=b.c
2.12B:right outer join
右外連接:結果集既包括連接表的匹配行,也包括右連接表的所有行
1.12C:full outer join
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表的所有行
3. mysql子查詢
3.1mysql子查詢語法與用法實例
子查詢是將一個 SELECT 語句的查詢結果作為中間結果,供另一個SQL 語句調用。MySQL支持SQL 標准要求的所有子查詢格式和操作,也擴展了特有的幾種特性。
示例:select* from article where uid in(select uid from user where status=1)
3.2mysql標量子查詢
標量子查詢是指子查詢返回的是單一值的標量,如一個數字或一個字符串,也是子查詢中最簡單的返回形式。
示例:select* from article where uid=(select uid from user where status=1 order by uid desclimit 1)
3.3mysql列子查詢
列子查詢是指子查詢返回的結果集是 N 行一列,該結果通常來自對表的某個字段查詢返回。
示例:select *from article where uid in(select uid from user where status=1)
3.4mysql行子查詢
行子查詢是指子查詢返回的結果集是一行N 列,該子查詢的結果通常是對表的某行數據進行查詢而返回的結果集。
示例:select* from table1 where (1,2)=(select col1,col2 from table)
3.5mysql表子查詢
表子查詢是指子查詢返回的結果集是N 行N 列的一個表數據。
示例:select *from article where (title,content,uid) in (select title, content, uid fromblog)
3.6mysql from子查詢
MySQL FROM 子查詢是指 FROM 的子句作為子查詢語句,主查詢再到子查詢結果中獲取需要的數據
語法:select …from(subquery) as name…
3.7mysql exists和notexists子查詢
語法:select …from table where exists(subquery)
該語法可以理解為:將主查詢的數據,放到子查詢中做條件驗證,根據驗證結果(TRUE或FALSE)來決定主查詢的數據結果是否得以保留。
示例:select *from article where exists(select * from user where article.uid=user.uid)
3.8mysql關聯子查詢
關聯子查詢是指一個包含對表的引用的子查詢,該表也顯示在外部查詢中。通俗一點來講,就是子查詢引用到了主查詢的數據數據
示例:selectarticle.* from article inner join user on article.uid=user.uid
4. mysql循環
4.1while…end while循環
Create procedure p1()
begin
declare v int;
set v=0;
while v<5 do
insertinto t values(v)
setv=v+1;
end while;
end;
4.2repeat…end repeat循環
create procedure p2()
begin
declare v int;
set v=0;
repeat
insert into t values(v);
set v=v+1;
until v>=5;
end repeat;
end;
注:until後面可以沒有分號
4.3loop…end loop循環
create procedure p3()
begin
declare v int;
set v=0;
loop_label:loop
insert into tvalues(v);
set v=v+1;
if v>=5 then
leaveloop_label;
end if;
end loop;
end;
5. mysql視圖查詢
5.1視圖定義
視圖是由查詢結果形成的一張虛擬表。
5.2視圖的使用
如果某個查詢結果出現的非常頻繁,也就是要經常拿這個查詢結果來做子查詢
5.3語法
create view 視圖名 as select 語句
5.4視圖優點
l 簡化查詢語句
示例:有一張商品表,我們要經常查每個欄目下的商品的平均價格
Select cat_id, avg(shop_price) from goods group by cat_id;
創建一個視圖
create view avgPrice as select cat_id, avg(shop_price) fromgoods group by cat_id;
當我們再次查詢每個欄目平均價格時,只需要這麼寫
select * from avgPrice;
l 進行權限控制
把表的權限封閉,但是開放相應的視圖權限,視圖裡只開放部分數據列,例如我們的goods商品表,我們不想讓別人看到我們的銷售價格,這個時候我們可以把商品表權限封閉,創建一張視圖
create view showGoods as select goods_id,goods_name fromgoods;
5.5視圖修改
Alter view 視圖名 as select 語句;
5.6視圖與表的關系
視圖是表的查詢結果,自然表的數據變了,會影響視圖的結果
6. mysql關聯查詢
6.1連接查詢簡介
連接查詢中用來連接兩個表的條件稱為連接條件或連接謂詞。其形式為:
[<表1>].<列名><連接運算符>[<表2>].<列2>
常見連接運算符包括
l 比較運算符:=、>、<、>=、<=、!=、between和and
l 邏輯運算符:not、and、or
6.2連接按照結果集分類
l 內連接:表中的行互相連接,結果集的行數等於每個表滿足條件的行數乘積,參與連接的表示平等的。
l 外連接:參與連接的表有主次之分,主表的每一行數據去匹配從表的數據列,符合連接條件的數據直接返回到結果集中,不符合連接條件的的數據列將以null填充後返回到結果集中,其中外連接又分為左外連接,右外連接和全連接。
6.3內連接查詢
內連接語法結構:
Select <屬性或表達式列表> from <表名> [inner]join <表名> on <連接條件> [where <限定條件>]
Inner可以省略,當只見到join時就是省略掉了inner。內連接就是傳統的連接操作,這裡用on子句指定連接條件,用where指定其他限定條件,
示例:select p.name,c.countryname from country as c inner join person p onp.countryid=c.countryid
6.4左外連接查詢
左外連接語法結構:
Select <屬性或表達式列表> from <表名> leftouter join <表名> on <連接條件> [where <限定條件>]
左外連接在結果表中包含第一個表中滿足條件的所有記錄,如果連接條件匹配,第二張表返回相應的值,否則返回null。也就是說不管第二個表有沒有記錄,第一張表的字段都會返回。
示例:select p.name,c.countryname from country as c right join person p onp.countryid=c.countryid
6.5右外連接查詢
右外連接查詢語法結構:
Select <屬性或表達式列表> from <表名> rightouter join <表名> on <連接條件> [where <限定條件>]
右外連接的結果表中包含第二張表中滿足條件的所有記錄,如果連接條件匹配,第一張表返回相應的值,否則返回null。
示例:select p.name, c.countryname from country as c right join person pon p.countryid=c.countryid
6.6全外連接查詢
全外連接查詢語法結構:
Select <屬性或表達式列表> from <表名> fullouter join <表名> on <連接條件> [where <限定條件>]
全外連接查詢的結果集表中包含兩個表滿足記錄所有記錄。如果在連接上條件上匹配的元組,則另一個表返回相應的值,否則返回null