MySQL查询语种关键字_SQL——SQL语言全部关键字详解
http://blog.csdn.net/quinnnorris/article/details/71056445
數(shù)據(jù)庫(kù)中我們做常用的就是SQL基本查詢語(yǔ)言,甚至有些人認(rèn)為數(shù)據(jù)庫(kù)就是SQL,SQL就是數(shù)據(jù)庫(kù)。雖然這種觀點(diǎn)是錯(cuò)誤的,但是也確實(shí)從一個(gè)方面體現(xiàn)了這種面向結(jié)果的查詢語(yǔ)言的重要性。
SQL語(yǔ)言基本定義
基本類型
SQL表中支持很多固有類型,包括:
類型含義
char(n)
存放固定長(zhǎng)度的字符串,用戶指定長(zhǎng)度為n。如果沒有使用n個(gè)長(zhǎng)度則會(huì)在末尾添加空格。
varchar(n)
可變長(zhǎng)度的字符串,用戶指定最大長(zhǎng)度n。char的改進(jìn)版,大多數(shù)情況下我們最好使用varchar。
int
整數(shù)類型
smallint
小整數(shù)類型
numeric(p,d)
定點(diǎn)數(shù),精度由用戶指定。這個(gè)數(shù)有p位數(shù)字(包括一個(gè)符號(hào)位)d位在小數(shù)點(diǎn)右邊。
real ,double precision
浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)。
float(n)
精度至少位n位的浮點(diǎn)數(shù)
特殊關(guān)鍵字
SQL中用很多關(guān)鍵字來(lái)表達(dá)CRUD的操作(增刪改查)。在這之外有很多特殊的關(guān)鍵字用來(lái)表示一些其他的含義,在總結(jié)SQL之前我們有必要進(jìn)行一些了解。
類型含義示例
primary key
主鍵,后面括號(hào)中是作為主鍵的屬性
primary key(student_id)
foreign key references
外鍵,括號(hào)中為外鍵,references后為外鍵的表
foreign key(course_id)?references?Course
not null
不為空,前面為屬性的定義
name varchar(10)?not null
SQL插入/刪除/修改語(yǔ)句
SQL語(yǔ)法使用最多的就是查詢,除了查找語(yǔ)句之外,其他的語(yǔ)句內(nèi)容都很少。
類型含義
create table
創(chuàng)建一張表
insert into…values
向表中插入一條信息
delete from
從表中刪除一條信息
update…set…where
在where的位置,更新內(nèi)容為set的值
drop table
刪除表
alter table…add
向表中添加某個(gè)屬性
alter table…drop
將表中的某個(gè)屬性刪除
create table
create?table?Student(
ID?varchar(20)?not?null,
name?varchar(10)?not?null,
age?int,
class?varchar(50),
primary?key?(ID));
創(chuàng)建一張叫做Student的表,表中有四個(gè)屬性,ID,姓名,年齡和班級(jí),么個(gè)屬性都有各自的類型。在這張表中主鍵是ID。
insert into…values
insert?into?Student(ID,name,class)
values(10152510302,"Tom","class?1");
向表中添加一行信息,一個(gè)名叫Tom的學(xué)生的信息,因?yàn)閍ge值不是not null,也就不是必須的,所以我們不添加age屬性也沒有問(wèn)題。
delete from
delete?form?Student
where?name="Tom";
從表中刪除所有名字叫做Tom的信息。如果delete from不寫where查詢條件表示清空這張表。
update…set…where
update?Student
set?age=18
where?name="Tom";
將所有名字叫做Tom的信息的年齡設(shè)置為18。
drop table
drop?table?Student;
刪除Student這張表。
alter table…add
alter?table?Student
add?sex?varchar(5);
向表中添加性別屬性,并且將表中以存放的信息的sex值設(shè)為null。所有通過(guò)這種方式添加的屬性都不能被設(shè)置為not null類型。
alter table…drop
alter?table?Student
drop?class;
從表中將class這一列屬性刪除。
SQL查詢語(yǔ)句
SQL最為常用的就是查詢,我們使用數(shù)據(jù)庫(kù)并從中查找出我們希望的內(nèi)容。在這個(gè)過(guò)程中,我們可能要編寫很復(fù)雜的語(yǔ)句。這里我們分類別詳細(xì)的總結(jié)具體的查詢情況。
單關(guān)系查詢
單關(guān)系查詢是指只一張表中的內(nèi)容查詢有關(guān)信息,不涉及其他的表,這是查詢中最為基本的一種情況。我們通過(guò)這種情況來(lái)總結(jié)一些基本的SQL語(yǔ)句編寫方法。下面先給出一些涉及到的關(guān)鍵字。
類型含義
select
表示要查找出的表所含有的屬性
from
表示要操作的表
where
判斷條件,根據(jù)該判斷條件選擇信息
distinct
在select后加入關(guān)鍵字distinct表示將結(jié)果去重
all
在select后加入關(guān)鍵字all表示不去重(默認(rèn))
and
在where中使用and表示將判斷條件連接起來(lái)
or
在where中使用or表示判斷條件多選一
not
在where中使用not表示判斷條件取反
在下面的查詢語(yǔ)句中,我們?nèi)耘f使用Student這張表來(lái)進(jìn)行操作。先回顧一下這張表的字段。
create?table?Student(
ID?varchar(20)?not?null,
name?varchar(10)?not?null,
age?int,
class?varchar(50),
primary?key?(ID));
示例:
select?name?distinct
from?Student
where?age=18?and?class="A";
在Student這張表中查詢所有年齡是18歲,并且班級(jí)是A的學(xué)生的名字,并將結(jié)果去重。
多關(guān)系查詢
多關(guān)系查詢是指在多個(gè)表中通過(guò)一些操作查找出希望的信息。除去上面已有的關(guān)鍵字,我們還會(huì)使用到下面這些。
類型含義
A,B
在from后面通過(guò)逗號(hào)連接多張表,表示將這些表進(jìn)行笛卡兒積運(yùn)算
natural join
將natural join關(guān)鍵字前后的兩張表進(jìn)行自然連接運(yùn)算
A join B using(c)
將A和B通過(guò)c屬性自然連接
為了能夠進(jìn)行多關(guān)系查詢,我們需要有除了Student的另外一張表。再建一張表,表示上數(shù)學(xué)課的所有學(xué)生的信息和成績(jī)情況。(實(shí)際上這兩張表建的都不好,不能滿足基本的幾個(gè)范式,但是為了方便起見用來(lái)舉例)
create?table?Math(
ID?varchar(20)?not?null,
name?varchar(10)?not?null,
sex?varchar(5),
score?int,
primary?key(ID));
示例:
select?score
form?Student?natural?join?Math
where?class<>"B"?and?sex="men"
將Student表和Math表自然連接,所得的結(jié)果查詢出不是B班的男生的成績(jī)。
附加運(yùn)算查詢
我們已經(jīng)總結(jié)了單關(guān)系和多關(guān)系運(yùn)算的查詢方法,但是只有這些
類型含義
as
將as前的關(guān)系起一個(gè)別名,在此語(yǔ)句中,可以用別名來(lái)代指這個(gè)表
*
在select中通過(guò): “表名.*” 來(lái)表示查找出這個(gè)表中所有的屬性
order by
讓查詢結(jié)果中的信息按照給定的屬性排序(默認(rèn)升序,上小下大)
desc
在order by之后的屬性后使用,表示采用降序排序
asc
在order by之后的屬性后使用,表示采用升序排序(默認(rèn))
between
在where中使用between表示一個(gè)數(shù)在兩個(gè)數(shù)值之間取值
not between
between的反義詞,在兩個(gè)數(shù)之外取值
union/union all
將兩個(gè)SQL語(yǔ)句做并運(yùn)算,并且自動(dòng)去重,添加all表示不去重
intersect/intersect all
將兩個(gè)SQL語(yǔ)句做交運(yùn)算,并且自動(dòng)去重,添加all表示不去重
except/except all
將兩個(gè)SQL語(yǔ)句做差運(yùn)算,并且自動(dòng)去重,添加all表示不去重
is null
在where中使用is null表示這個(gè)值是空值
is not null
在where中使用is not null表示這個(gè)值不是空值
示例:
select?S.*
from?Student?as?S,Math?as?M
where?S.ID?=?M.ID
將Student和Math兩張表做笛卡兒積,結(jié)果中所有ID相同的信息,取出他們屬于Student屬性的部分作為結(jié)果。
select?name
from?Student?natural?join?Math
where?class="A"?and?sex="women"
order?by?score?desc;
在Student和Math自然連接的結(jié)果中,找出A班的女生的姓名,并且按照成績(jī)的降序把名字排列出來(lái)。
select?name
from?Math
where?score?between?60?and?90;
order?by?score?asc;
在Math表中,找出成績(jī)?cè)?0分到90分之間的學(xué)生姓名,并且將姓名按照成績(jī)的升序排列出來(lái)。
(select?name
from?Student?natural?join?Math
where?class="A"?and?sex="women"
order?by?score?desc)
union
(select?name
from?Math
where?score?between?60?and?90;
order?by?score);
將上面兩個(gè)查出來(lái)的結(jié)果做并集,并且去重。
select?name
from?Student
where?age?is?null;
在Student表中記錄的年齡值未填寫(為空)的所有人的姓名查出來(lái)。
聚集函數(shù)運(yùn)算查詢
已經(jīng)總結(jié)了SQL語(yǔ)句的很多關(guān)鍵字,現(xiàn)在我們可任意的進(jìn)行排序、查找。但是如果我們要獲得一些與數(shù)據(jù)相關(guān)的統(tǒng)計(jì)信息,但是這些信息在數(shù)據(jù)庫(kù)中沒有,那么我們要使用SQL中的聚集函數(shù)來(lái)進(jìn)行操作。
類型含義
avg
平均值
min
最小值
max
最大值
sum
總和
count
計(jì)數(shù)
distinct
表示將distinct后的屬性去重
group by
將在group by上取值相同的信息分在一個(gè)組里
having
對(duì)group by產(chǎn)生的分組進(jìn)行篩選,可以使用聚集函數(shù)
示例:
select?class,avg(score)?as?avg_score
from?Student?natural?join?Math
group?by?class
having?avg(score)?
在Student與Math表自然連接的結(jié)果中按照班級(jí)分組,并且去除那些班級(jí)的平均成績(jī)沒到60的班級(jí),剩下的班級(jí)和該班成績(jī)的平均數(shù)(該班成績(jī)的平均數(shù)這個(gè)屬性被重命名為avg_score)作為一張新表被輸出出來(lái)。
總結(jié)
以上是生活随笔為你收集整理的MySQL查询语种关键字_SQL——SQL语言全部关键字详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: quercus mysql_14.5 Q
- 下一篇: 树莓派查看mysql的密码_树莓派安装M