? ? 學(xué)習(xí)web安全足足有一個半月有余,之前學(xué)的是前端,也會一點python。。好吧差不多忘了。常規(guī)工具算是熟悉基本流程了。。還欠缺實戰(zhàn)。
? ? 再學(xué)習(xí)SQL注入的時候,頭痛于不理解SQL語法,這個騙不了別人,即使憑借經(jīng)驗記住SQL注入繞過語法也不懂得他們的意思,尤其是看《SQL注入攻擊與防御》這本書的150-175頁的時候,我是徹底懵比了! ?
? ? ? ?我內(nèi)心是不服輸?shù)模缓髸恢睕]看,因為看不懂啊,那種感受就好像有一大堆好吃的在你旁邊,你卻吸收不了。對就是那種感覺。
? ? 時間就是生命,我這星期才明白什么叫短暫的時間能做出很多事情,時間就像海綿一樣,擠一擠就有了。利用下課的空閑時間完成了一份SQL語法筆記,我也是邊看W3c邊做的筆記。因為住宿,我無法提供數(shù)據(jù)庫練習(xí),這里頗有遺憾,但是筆記理論性絕對強! ? 筆記不是完美了,我只是個新手,從我的角度從我新手的角度理解,有不對的地方請各位大牛提出來,大家一起互相學(xué)習(xí)。
? ?不bb了,看我四天的工作量吧!
熟悉SQL之路
SQL是結(jié)構(gòu)化查詢語
SQL對大小寫不敏感!
*代表所有!
SELECT獲取數(shù)據(jù),查詢語句
select name(列名) from admin(表名)
-------------------------
DISINCT,配合SELECT使用,作用,去除重復(fù)部分。
select disinct name from admin (from后面是存儲數(shù)據(jù)(列名)的數(shù)據(jù)庫表)
-------------------------
WHERE字句,SELECT * from person where name="紅塵" ?查詢列名是紅塵的來自person表。
//where是條件語句
用于條件搜索:select * from person where like='jack'//搜索關(guān)鍵字jack
--------------------------
AND&OR AND是并列關(guān)系,兩者都需要滿足,OR是或的意思,兩者滿足其一。
--------------------------
關(guān)于order by
order by字母的排序方式是以:A,B,C,D......Z這種,越靠前就排序靠前。
order by數(shù)字的排序方式是以:1,2,3,4,5,6....這種,越靠前排序靠前。
order by字母和order by數(shù)字同時排序的時候,排序的方式:字母的排序大于數(shù)字的排序!所以排序先看字母,字母越靠前順序就最前面!假如字母的位數(shù)都相同,比較數(shù)字的話,那么數(shù)字越小的越靠前。
SQL語句對大小寫不敏感,ORDER BY也是可以。
反之desc(DESC)是反序排列,排序方法與正序排列雷同。
-------------------
insert into語句,含義:像表格中插入新的一行數(shù)據(jù)
insert into admin(表名) values('紅塵','男','red','apple')
*要已知表名是admin并且admin表是四列!
insert into admin('姓名','性別') values('紅塵','男');//指定插入一行數(shù)據(jù),你得知道表中的列名。
-----------------
update 含義:修改表中的數(shù)據(jù)
update 表 set(創(chuàng)建) name=jack(新值) where people(列名)=man
update admin set name=jack where people=man
------------------
delete語句
delete from admin(表名) ?where name(列名)=jack
//刪除表中列名為jack的一行。
delete * from table_name
//刪除所有行
-------------
Top子句,Limit子句,ROWSUM子句
不是所有數(shù)據(jù)庫都支持top字句,支持top的只有mssql數(shù)據(jù)庫(sql server數(shù)據(jù)庫)
top的用法有兩種:
1、select top 2 ?* / ?指定某一個列名(columns_name) from admin(表名) ?//注釋top的含義自我翻譯了下,含義很多,感覺最標準就是在...的前頭,這里的含義就是查詢所有列名中的前兩行的數(shù)據(jù)記錄行來自表名 (admin) / 查詢前二行的指定列名下的數(shù)據(jù)內(nèi)容來自表名(admin)。
2、select top 50percent * / 指定某一個列(columns_name)from admin(表名) ? //查詢前百分之50的所有列下的數(shù)據(jù)記錄行來自admin(表) / 查詢前百分之50的指定列名下的數(shù)據(jù)來自admin(表)。
///////////////////
與top用法相同的是limit字句,limit適用于mysql,它是支持mysql數(shù)據(jù)庫的。
limit詳細用法:
1、select * / 列名(columns_name) from admin(表名) limit 5 ? ? //查詢前5行的所有列下的數(shù)據(jù)記錄行來自admin(表) / 查詢前5行的指定列名下的數(shù)據(jù)來自admin(表)。2、select * / 列名(columns_name) from admin(表名) limit 5,10 //查詢前6行-15行的所有列下的數(shù)據(jù)記錄行來自admin(表) / 查詢前5行-15行的指定列名下的數(shù)據(jù)來自admin(表)。//limit5,10起始是5開始,變成6,因為返回的是所有記錄,所以10要加上起始的5就是15。舉例:limit 3,6就是前4行-9行。是limit (初始值+1) (初始值+末尾值)使用limit注意點:
limit不可以是負數(shù)!limit初始值是0不是1
limt 0相當于limit 0,n。
取決于第二位數(shù)。
---------------
?與top,limit雷同的語句是:ROWNUM,rownum支持oracle數(shù)據(jù)庫。
用法:select * from admin(表) ?where rownum<=5
這里的rownum使用方式比較奇怪,它是跟在where子句上的,是條件語句執(zhí)行的。
rownum初始值是1,rownum=1就是顯示表中的第一行,顧名思義,2就是顯示表中的前二行。但是寫法上就有點不一樣。
假如寫成rownum=2,這樣寫看上去是對的,但是oracle語法不支持這種寫法,既然是限制,那么我想顯示表中前二行的記錄行,那么應(yīng)該是rownum<=2,這里的意思就是返回前面二行的記錄行,<在這里有種過去的意思。
那rownum>2呢,它的意思就是從第二行開始返回記錄行。怎么才能使用它?
答:需要調(diào)用rownum rn才行!
用法如下:
查詢前3條信息:select * from admin where rownum<4
查詢前3條信息:select * from admin where rownum<=3
像mssql數(shù)據(jù)庫中top n一樣,我們需要:select * from (select * from admin order by ID) where rownum<=5
查詢第3條-第5條信息:select * from(select a.* rownum rn from admin(表名) a) ?where rn>=3 and rn<=5
a.*是數(shù)據(jù)庫別名,我也不太懂。
-------------
LIKE操作符,比較好理解,不像上面的那些好抽象。
用法有四種:
1、select * from admin(表名) where name(列名) like 'j%' ? ? //查詢搜索來自admin表中以j開頭name(列名)的人
2、select * from admin(表名) where name(列名) like '%j' ? ? //查詢搜索來自admin表中以j末尾的name(列名)的人
3、select * from admin(表名) where name(列名) like '%jack%' ? ?//查詢搜索來自admin表中包含jack的name(列名)的人
4、select * from admin(表名) where name(列名) not like '%jack%' ? ?//查詢搜索來自admin表中不包含jack的name(列名)的人
-- ?%是SQL的通配符
-------------
IN操作符,選取表中的內(nèi)容
用法:select * from admin(表) where name(列名) in('jack','marry') ? ?//獲取來自admin表中的name列名是jack和marry的數(shù)據(jù)記錄行
------------
BETWEEN操作符
between..and的含義就是選取兩個值之間的數(shù)據(jù)范圍,選取的兩個值可以是數(shù)字,也可以是字母。
用法:
1、select * from admin where name between 'jack' and 'abc' ? ?//查詢來自admin表中列名是在jack和abc之間的數(shù)據(jù)記錄行
2、也可以用大小于號代替BETWEEN
用法如下:select * from admin where number>10 and number<20 ? ?//查詢來自admin表中number(列名)是在大于10和小于20的之間的數(shù)據(jù)記錄行
這些都是選取兩個值之間的數(shù)據(jù)范圍,一切都是兩面性,還有不選取兩個值之間的數(shù)據(jù)范圍,它就是not between,
not between用法和between用法雷同
---------
SQL JOIN徹底刨析
http://blog.jobbole.com/40443/ ? 我已經(jīng)無法用語言解釋了,此乃精品!
----------
SQL ?UNION
解釋:UNION 指令的目的是將兩個 SQL 語句的結(jié)果合并起來。從這個角度來看, UNION 跟 JOIN 有些許類似,因為這兩個指令都可以由多個表格中擷取資料。 UNION 的一個限制是兩個 SQL 語句所產(chǎn)生的欄位需要是同樣的資料種類。另外,當我們用 UNION這個指令時,我們只會看到不同的資料值 (類似 SELECT DISTINCT)。不會出現(xiàn)重復(fù)的一模一樣的。
用法:union select name from admin
//會獲取所有的name(列名),不會有重復(fù)
-------------
SQL ?SELECT INTO FROM
-----------
熟悉SQL之路續(xù)篇1
SQL ? SELECT INTO FROM
select...into...from...不支持mysql數(shù)據(jù)庫!
解釋三個...;依次從左往后
1、...*/columns_name
2、...newtable_name
3、...oldtable_name
支持mssql數(shù)據(jù)庫!
用法:select id,name into admin2 from admin1 ? ? ?//獲取admin1表中的id,name;id和name都是admin1表中的列名插入到admin2表中了。在這里我們不需要事先創(chuàng)建admin2,admin2會系統(tǒng)自動創(chuàng)建假如你事先創(chuàng)建了admin2那么就會說你已經(jīng)存在此表,不能插入。
----------------
我們也可以添加where子句。
用法:select id,name into admin2 from admin1 where city='china' ? //查詢獲取來自admin1中的id,name,把id,name插入到admin2表,這個插入過程中,需要滿足的條件是要保證插入的城市是china。
----------
create DB 數(shù)據(jù)庫名 //創(chuàng)建數(shù)據(jù)庫
create table 表名稱(列名1 數(shù)據(jù)類型,列名2 數(shù)據(jù)類型,列名3 數(shù)據(jù)類型.......)
---------
SQL的約束
1、NOT NULL
NOT NULL顧名思義,沒有NULL的意思。在SQL語法中就是強制列不接受NULL值。NOT NULL一般寫在數(shù)據(jù)類型的后面或者代替數(shù)據(jù)類型的位置
舉例子說明:
create table abc(
id ? int ?NOT NULL
);
2、UNIQUE
UNIQUE約束唯一標識數(shù)據(jù)庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
注意點:UNIQUE可以標識多次約束對每個表,而PRIMARY KEY只能標識一次對每個表。
感覺很好理解,不手寫了,負責(zé)一段內(nèi)容自己找尋其中規(guī)律:
下面的 SQL 在 "Persons" 表創(chuàng)建時在 "Id_P" 列創(chuàng)建 UNIQUE 約束:
? ? ?MySQL:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )
? ? ?SQL Server / Oracle / MS Access:
CREATE TABLE Persons ( Id_P int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
? ? ?如果需要命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束,請使用下面的 SQL 語法:
? ? ?MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )
-------
規(guī)律:UNIQUE約束都是添加在最后的,約束一個的話,最后一個逗號是UNIQUE前面一位數(shù)據(jù)類型上,而且需要區(qū)別數(shù)據(jù)庫。UNIQUE約束多位的話,不需要區(qū)分多位數(shù)據(jù)庫,并且UNIQUE約束的前一位數(shù)據(jù)類型后面不需要逗號,數(shù)據(jù)庫認為約束的前面一位是最后一位。
3、PRIMARY KEY
不想手寫了,參照UNIQUE就行!摘錄網(wǎng)上的一段:
SQL PRIMARY KEY 約束
? ? ?PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。
? ? ?主鍵必須包含唯一的值。
? ? ?主鍵列不能包含 NULL 值。
? ? ?每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵。
SQL PRIMARY KEY Constraint on CREATE TABLE
? ? ?下面的 SQL 在 "Persons" 表創(chuàng)建時在 "Id_P" 列創(chuàng)建 PRIMARY KEY 約束:
? ? ?MySQL:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
? ? ?SQL Server / Oracle / MS Access:
CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
? ? ?如果需要命名 PRIMARY KEY 約束,以及為多個列定義 PRIMARY KEY 約束,請使用下面的 SQL 語法:
? ? ?MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) )
//自行尋找規(guī)律
4、FOREIGN KEY
FOREIGN KEY的含義是外鍵。
看了文章沒看懂,到時候看懂補上。。。
為什么要添加外鍵?
答:FOREIGN KEY 約束用于預(yù)防破壞表之間連接的動作。
FOREIGN KEY 約束也能防止非法數(shù)據(jù)插入外鍵列,因為它必須是它指向的那個表中的值之一。
熟悉SQL之路續(xù)篇2
5、SQL CHECK 約束 ?挺簡單的。。。。
CHECK 約束用于限制列中的值的范圍。
如果對單個列定義 CHECK 約束,那么該列只允許特定的值。
如果對一個表定義 CHECK 約束,那么此約束會在特定的列中對值進行限制。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時為 "Id_P" 列創(chuàng)建 CHECK 約束。CHECK 約束規(guī)定 "Id_P" 列必須只包含大于 0 的整數(shù)。
My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 CHECK 約束,以及為多個列定義 CHECK 約束,請使用下面的 SQL 語法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
SQL CHECK Constraint on ALTER TABLE
如果在表已存在的情況下為 "Id_P" 列創(chuàng)建 CHECK 約束,請使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Id_P>0)
如果需要命名 CHECK 約束,以及為多個列定義 CHECK 約束,請使用下面的 SQL 語法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
撤銷 CHECK 約束
如需撤銷 CHECK 約束,請使用下面的 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
//偷懶了,實在內(nèi)容太多這塊,我解釋不清。。。但是這個沒啥難度。
6、DEFAULT
SQL DEFAULT 約束
DEFAULT 約束用于向列中插入默認值。
如果沒有規(guī)定其他的值,那么會將默認值添加到所有的新記錄。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時為 "City" 列創(chuàng)建 DEFAULT 約束:
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
通過使用類似 GETDATE() 這樣的函數(shù),DEFAULT 約束也可以用于插入系統(tǒng)值:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
SQL DEFAULT Constraint on ALTER TABLE
如果在表已存在的情況下為 "City" 列創(chuàng)建 DEFAULT 約束,請使用下面的 SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
撤銷 DEFAULT 約束
如需撤銷 DEFAULT 約束,請使用下面的 SQL:
MySQL:
ALTER TABLE Personsk
ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
----------------
CREATE ?INDEX
create index index_name on table_name (column_name)
//"column_name" 規(guī)定需要索引的列。
-------------
SQL刪除索引,表和數(shù)據(jù)庫。
通過使用 DROP 語句,可以輕松地刪除索引、表和數(shù)據(jù)庫。
SQL DROP INDEX 語句
我們可以使用 DROP INDEX 命令刪除表格中的索引。
用于 Microsoft SQLJet (以及 Microsoft Access) 的語法:
DROP INDEX index_name ON table_name
用于 MS SQL Server 的語法:
DROP INDEX table_name.index_name
用于 IBM DB2 和 Oracle 語法:
DROP INDEX index_name
用于 MySQL 的語法:
ALTER TABLE table_name DROP INDEX index_name
SQL DROP TABLE 語句
DROP TABLE 語句用于刪除表(表的結(jié)構(gòu)、屬性以及索引也會被刪除):
DROP TABLE 表名稱
SQL DROP DATABASE 語句
DROP DATABASE 語句用于刪除數(shù)據(jù)庫:
DROP DATABASE 數(shù)據(jù)庫名稱
SQL TRUNCATE TABLE 語句
如果我們僅僅需要除去表內(nèi)的數(shù)據(jù),但并不刪除表本身,那么我們該如何做呢?
請使用 TRUNCATE TABLE 命令(僅僅刪除表格中的數(shù)據(jù)):
TRUNCATE TABLE 表名稱
---------------------------------
SQL ?ALERT TABLE
ALTER TABLE 語句
ALTER TABLE 語句用于在已有的表中添加、修改或刪除列。
SQL ALTER TABLE 語法
如需在表中添加列,請使用下列語法:
ALTER TABLE table_name(表名)
ADD column_name(列名) datatype(數(shù)據(jù)類型)
要刪除表中的列,請使用下列語法:
ALTER TABLE table_name
DROP COLUMN column_name(列名)
改變數(shù)據(jù)類型實例
我們使用下列 SQL 語句:
ALTER TABLE admin(表名)
ALTER COLUMN Birthday year(數(shù)據(jù)類型)
//修改表名中的列名的數(shù)據(jù)類型,把原先的數(shù)據(jù)類型改成year數(shù)據(jù)類型。
刪除admin表中的列名Birthday
SQL語法如下:ALTER TABLE admin DROP COLUMN Birthday
-------------------
SQL AUTO INCREMENT
AUTO INCREMENT 字段
我們通常希望在每次插入新記錄時,自動地創(chuàng)建主鍵字段的值。
我們可以在表中創(chuàng)建一個 auto-increment 字段。
? 自己的理解:就是主鍵的排序方式以遞增的方式,是以1,2,3,4....這種,不是那種凌亂零散的排序,AUTO INCREMENT的開始值是1,以1遞增。
------------------
熟悉SQL之路續(xù)篇3
1、SQL NULL
NULL 值是遺漏的未知數(shù)據(jù)。
SQL NULL 值
如果表中的某個列是可選的,那么我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味著該字段將以 NULL 值保存。
NULL 值的處理方式與其他值不同。
NULL 用作未知的或不適用的值的占位符。
注釋:無法比較 NULL 和 0;它們是不等價的。
SQL 的 NULL 值處理
請看下面的 "Persons" 表:
Id LastName FirstName Address City
1 Adams ? ? ? ? John ? ? ? ? ? ? ? ? ? ? London
2 Bush George Fifth Avenue ? ? New York
3 Carter ? Thomas ? ? ? ? ? ? ? ? ? ? ? ?Beijing
假如 "Persons" 表中的 "Address" 列是可選的。這意味著如果在 "Address" 列插入一條不帶值的記錄,"Address" 列會使用 NULL 值保存。
那么我們?nèi)绾螠y試 NULL 值呢?
無法使用比較運算符來測試 NULL 值,比如 =, <, 或者 <>。
我們必須使用 IS NULL 和 IS NOT NULL 操作符。
----------
2、SQL IS NULL
我們?nèi)绾蝺H僅選取在 "Address" 列中帶有 NULL 值的記錄呢?
我們必須使用 IS NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
結(jié)果集:
LastName FirstName Address
Adams John
Carter Thomas
提示:請始終使用 IS NULL 來查找 NULL 值。
---------
3、SQL IS NOT NULL
我們?nèi)绾芜x取在 "Address" 列中不帶有 NULL 值的記錄呢?
我們必須使用 IS NOT NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons ?WHERE Address IS NOT NULL
結(jié)果集:
LastName FirstName Address
Bush George Fifth Avenue
源于W3C,這個解釋的比較清楚,感覺沒啥難度。
------------
SQL NULL函數(shù)
不解釋了:http://www.w3school.com.cn/sql/sql_isnull.asp ? ?自己去看,我解釋不了。
SQL關(guān)鍵之SQL函數(shù)
SQL SVG() ? 此函數(shù)用來計算數(shù)值列的平均值,NULL不包括在其中。
用法:select SVG(column_name) from table_name
----------
SQL COUNT() ? 此函數(shù)用來返回匹配指定條件的行數(shù)。
用法:select COUNT(column_name) from table_name
實例:
1、select COUNT(name) from admin ? ? ?//查詢來自admin表中的的列名name總共有多少行,假如name中有重復(fù)的名字,那么想不重復(fù),語法如下:select COUNT(DISTINCT name) from admin //查詢來自admin表中的列名是name的行數(shù),name不重復(fù)。
2、select COUNT(*) from admin ? //查詢并且返回admin表中的全部行數(shù),*代表所有,你懂的。
----------
3、SQL FIRST() ? ?FIRST() 函數(shù)返回指定的字段中第一個記錄的值。
用法:select FIRST(column_name) from table_name
-----------
4、SQL LAST() ? ?LAST() 函數(shù)返回指定的字段中最后一個記錄的值。
用法:select LAST(column_name) from table_name
--------------
5、SQL MAX()
MAX()函數(shù)返回一列中的最大值。NULL 值不包括在計算中。
用法:select MAX(column_name) from table_name
---------------
6、SQL MIN()
MIN() 函數(shù)
MIN函數(shù)返回一列中的最小值。NULL 值不包括在計算中。
用法:select MIN(column_name) from table_name
-----------
7、SQL SUM() 函數(shù)
SUM()函數(shù)返回數(shù)值列的總數(shù)(總額)。
用法:select SUM(column_name) from table_name
------------
8、SQL GROUP BY子句
GROUP BY 語句用于結(jié)合合計函數(shù)(如SUM就是合計函數(shù)),根據(jù)一個或多個列對結(jié)果集進行分組。
用法:select name(列名),SUM(money(列名)) from admin(表名) GROUP BY name
注意點:當name列中有相同的名字的話,那么group by的時候兩個名字自動合并成一個名字。
--------
9、SQL HAVING子句
代替where子句,用法雷同于where。
看看w3c給的解釋:在 SQL 中增加 HAVING 子句原因是,WHERE 關(guān)鍵字無法與合計函數(shù)一起使用。
用法:select name(列名),SUM(money(列名)) from admin(表) GROUP BY name(列名) HAVING ?SUM(money(列名))<1500 ?//查詢來自admin表中的名字和money的總和把他們的結(jié)果進行分組,有相同的就合并條件是name中money的總和要大于1500。
深度理解:group by是對你的結(jié)果進行分組,而having是對查詢的結(jié)果進行一定的篩選。where只是一個普通的條件句,它只針對一些簡單的條件進行的查詢!
having子句與where子句的區(qū)別是:where子句在分組之前過濾數(shù)據(jù),而having子句則過濾分組后的數(shù)據(jù),從這兩個示例來講,后面這個的性能會比較前面的高。
--------------
10、SQL ?UCASE() 函數(shù)
UCASE()函數(shù)把字段的值轉(zhuǎn)換為大寫。
用法:select UCASE(column_name) from table_name
--------------
11、SQL LCASE()函數(shù)
LCASE()函數(shù)把字段的值轉(zhuǎn)換成小寫。
用法:select LCASE(column_name) from table_name
-------------
12、MID() 函數(shù)
MID()函數(shù)用于從文本字段中提取字符。
SQL MID() 語法
select MID(column_name,start,[length]) from table_name
參數(shù) 描述
column_name 必需。要提取字符的字段。
start 必需。規(guī)定開始位置(起始值是 1)。
length 可選。要返回的字符數(shù)。如果省略,則 MID() 函數(shù)返回剩余文本。
用法:select MID(name,1,3) from admin
//查詢來自admin表中的列名并且提取name(列名)中的前三個數(shù)。
-----------
12、SQL LEN()
LEN()函數(shù)返回文本字段中值的長度。
用法:select LEN(column_name) from table_name
-----------
13、SQL ROUND()
ROUND()函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)。
SQL ROUND() 語法
SELECT ROUND(column_name,decimals) FROM table_name
參數(shù) 描述
column_name 必需。要舍入的字段。
decimals 必需。規(guī)定要返回的小數(shù)位數(shù)。
用法:select ROUND(price,1) from admin
//查詢來自admin表中的價格,因為有ROUND函數(shù),所以對price列的數(shù)據(jù)進行四舍五入并且保留一位小數(shù),假如是ROUND(price,0),那么就是不保留小數(shù)。
-----------
14、SQL NOW()
NOW()函數(shù)返回當前的日期和時間。
用法:select NOW() from table_name
------------
15、SQL FORMAT()
FORMAT 函數(shù)用于對字段的顯示進行格式化。
SQL FORMAT() 語法
SELECT FORMAT(column_name,format) FROM table_name
參數(shù)
描述
column_name
必需。要格式化的字段。
format
必需。規(guī)定格式。
-----
舉實例方便理解:select FORMAT(name,'jack') from admin
//name是列名,admin是表名,FORMAT是格式化函數(shù),這句話含義:查詢來自admin表中的name列名,因為啟用了FORMAT函數(shù),所以格式化name列名中的jack。
? ? ? 好了,筆記完了,利用了一點空閑時間寫的,其實人的潛力還是很大的,趕快加入我吧,努力學(xué)習(xí),珍惜你的時間。