真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SQL語(yǔ)句簡(jiǎn)介及練習(xí)

SQL語(yǔ)句簡(jiǎn)介及練習(xí)

為新豐等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及新豐網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、新豐網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

SQL語(yǔ)言的興起與語(yǔ)法標(biāo)準(zhǔn)

20世紀(jì)70年代,IBM開(kāi)發(fā)出SQL,用于DB2

1981年,IBM推出SQL/DS數(shù)據(jù)庫(kù)

業(yè)內(nèi)標(biāo)準(zhǔn)微軟和Sybase的T-SQL,Oracle的PL/SQL

SQL作為關(guān)系型數(shù)據(jù)庫(kù)所使用的標(biāo)準(zhǔn)語(yǔ)言,最初是基于IBM的實(shí)現(xiàn)在1986年被批準(zhǔn)的。1987年,“國(guó)際標(biāo)準(zhǔn)化組織(ISO)”把ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)化組織) SQL作為國(guó)際標(biāo)準(zhǔn)。

SQL:ANSI SQL

SQL-86, SQL-89, SQL-92, SQL-99, SQL-03

 

SQL語(yǔ)言規(guī)范

在數(shù)據(jù)庫(kù)系統(tǒng)中,SQL語(yǔ)句不區(qū)分大小寫(xiě)(建議用大寫(xiě))

但字符串常量區(qū)分大小寫(xiě)

SQL語(yǔ)句可單行或多行書(shū)寫(xiě),以“;”結(jié)尾

關(guān)鍵詞不能跨多行或簡(jiǎn)寫(xiě)

用空格和縮進(jìn)來(lái)提高語(yǔ)句的可讀性

子句通常位于獨(dú)立行,便于編輯,提高可讀性

注釋:

SQL標(biāo)準(zhǔn):

/*注釋內(nèi)容*/多行注釋

--注釋內(nèi)容 單行注釋,注意有空格

MySQL注釋:

除了SQL標(biāo)準(zhǔn)外還可以用#

 

數(shù)據(jù)庫(kù)對(duì)象

數(shù)據(jù)庫(kù)的組件(對(duì)象):

數(shù)據(jù)庫(kù)、表、索引、視圖、用戶、存儲(chǔ)過(guò)程、函數(shù)、觸發(fā)器、事件調(diào)度器等

命名規(guī)則:

必須以字母開(kāi)頭

可包括數(shù)字和三個(gè)特殊字符(# _ $,#和$盡量別用)

不要使用MySQL的保留字

同一database(Schema)下的對(duì)象不能同名,即使是不同類型的對(duì)象

 

SQL語(yǔ)句分類

SQL語(yǔ)句分類:

DDL: Data Defination Language

CREATE, DROP, ALTER

DML: Data Manipulation Language

INSERT, DELETE, UPDATE

DCL:Data Control Language

GRANT, REVOKE

DQL:Data Query Language

SELECT

 

SQL語(yǔ)句構(gòu)成

SQL語(yǔ)句構(gòu)成:

Keyword組成clause(子句)

多條clause組成語(yǔ)句

示例:

SELECT * SELECT子句

FROM products FROM子句

WHERE price>400 WHERE子句

說(shuō)明:此為一組SQL語(yǔ)句,由三個(gè)子句構(gòu)成,SELECT,FROM和WHERE是關(guān)鍵字

 

數(shù)據(jù)庫(kù)操作

創(chuàng)建數(shù)據(jù)庫(kù):

CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME'; #創(chuàng)建數(shù)據(jù)庫(kù)

CHARACTER SET 'character set name' #指定字符集

COLLATE 'collate name' #指定排序方式

刪除數(shù)據(jù)庫(kù)

DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';

查看支持所有字符集:SHOW CHARACTER SET;

查看支持所有排序規(guī)則:SHOW COLLATION;

獲取命令使用幫助:

mysql> HELP KEYWORD;

例:HELP CREATE DATABASE;

看到基本用法及幫助文檔的鏈接,可以去看

URL: http://dev.mysql.com/doc/refman/5.5/en/create-database.html

查看數(shù)據(jù)庫(kù)列表:

mysql> SHOW DATABASES;

[root@centos7 ~]#cat /var/lib/mysql/db1/db.opt

default-character-set=latin1

default-collation=latin1_swedish_ci

 

表:二維關(guān)系

設(shè)計(jì)表:遵循規(guī)范

定義:字段,索引

字段:字段名,字段數(shù)據(jù)類型,修改符

約束,索引:應(yīng)該創(chuàng)建在經(jīng)常用作查詢條件的字段上

 

創(chuàng)建表

創(chuàng)建表:CREATE TABLE

(1)直接創(chuàng)建

(2)通過(guò)查詢現(xiàn)存表創(chuàng)建;新表會(huì)被直接插入查詢而來(lái)的數(shù)據(jù)

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options]

[partition_options] select_statement

(3)通過(guò)復(fù)制現(xiàn)存的表的表結(jié)構(gòu)創(chuàng)建,但不復(fù)制數(shù)據(jù)

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }

注意:

Storage Engine是指表類型,也即在表創(chuàng)建時(shí)指明其使用的存儲(chǔ)引擎,同一庫(kù)中不同表可以使用不同的存儲(chǔ)引擎

同一個(gè)庫(kù)中表建議要使用同一種存儲(chǔ)引擎類型

 

創(chuàng)建表

CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1修飾符, col2 type2修飾符, ...) #[IF NOT EXISTS]字段在腳本中一般要加

字段信息

?col type1

?PRIMARY KEY(col1,...)

?INDEX(col1, ...)

?UNIQUE KEY(col1, ...)

表選項(xiàng):

?ENGINE [=] engine_name

SHOW ENGINES;查看支持的engine類型

?ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

獲取幫助:mysql> HELP CREATE TABLE;

 

表操作

查看所有的引擎:SHOW ENGINES

查看表:SHOW TABLES [FROM db_name]

查看表結(jié)構(gòu):DESC [db_name.]tb_name

刪除表:DROP TABLE [IF EXISTS] tb_name

查看表創(chuàng)建命令:SHOW CREATE TABLE tbl_name

查看表狀態(tài):SHOW TABLE STATUS LIKE 'tbl_name'

查看庫(kù)中所有表狀態(tài):SHOW TABLE STATUS FROM db_name

 

數(shù)據(jù)類型

數(shù)據(jù)類型:

數(shù)據(jù)長(zhǎng)什么樣?

數(shù)據(jù)需要多少空間來(lái)存放?

系統(tǒng)內(nèi)置數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型

MySql支持多種列類型:

數(shù)值類型

日期/時(shí)間類型

字符串(字符)類型

https://dev.mysql.com/doc/refman/5.5/en/data-types.html

選擇正確的數(shù)據(jù)類型對(duì)于獲得高性能至關(guān)重要,三大原則:

更小的通常更好,盡量使用可正確存儲(chǔ)數(shù)據(jù)的最小數(shù)據(jù)類型

簡(jiǎn)單就好,簡(jiǎn)單數(shù)據(jù)類型的操作通常需要更少的CPU周期

盡量避免NULL,包含為NULL的列,對(duì)MySQL更難優(yōu)化(可填個(gè)默認(rèn)值)

 

數(shù)據(jù)類型

SQL語(yǔ)句簡(jiǎn)介及練習(xí)

 

數(shù)據(jù)類型

1、整型

tinyint(m) 1個(gè)字節(jié) 范圍(-128~127)

smallint(m) 2個(gè)字節(jié) 范圍(-32768~32767)

mediumint(m) 3個(gè)字節(jié) 范圍(-8388608~8388607)

int(m) 4個(gè)字節(jié) 范圍(-2147483648~2147483647)

bigint(m) 8個(gè)字節(jié) 范圍(+-9.22*10的18次方)

取值范圍如果加了unsigned,則最大值翻倍,如tinyint unsigned的取值范圍為(0~255)

int(m)里的m是表示SELECT查詢結(jié)果集中的顯示寬度,并不影響實(shí)際的取值范圍,規(guī)定了MySQL的一些交互工具(例如MySQL命令行客戶端)用來(lái)顯示字符的個(gè)數(shù)。對(duì)于存儲(chǔ)和計(jì)算來(lái)說(shuō),Int(1)和Int(20)是相同的

BOOL,BOOLEAN:布爾型,是TINYINT(1)的同義詞。zero值被視為假。非zero值視為真

 

2、浮點(diǎn)型(float和double),近似值

float(m,d)單精度浮點(diǎn)型 8位精度(4字節(jié)) m總個(gè)數(shù),d小數(shù)位

double(m,d)雙精度浮點(diǎn)型16位精度(8字節(jié)) m總個(gè)數(shù),d小數(shù)位

設(shè)一個(gè)字段定義為float(6,3),如果插入一個(gè)數(shù)123.45678,實(shí)際數(shù)據(jù)庫(kù)里存的是123.457,但總個(gè)數(shù)還以實(shí)際為準(zhǔn),即6位

 

3、定點(diǎn)數(shù)

在數(shù)據(jù)庫(kù)中存放的是精確值,存為十進(jìn)制

decimal(m,d)參數(shù)m<65是總個(gè)數(shù),d<30且 d

MySQL5.0和更高版本將數(shù)字打包保存到一個(gè)二進(jìn)制字符串中(每4個(gè)字節(jié)存9個(gè)數(shù)字)。例如,decimal(18,9)小數(shù)點(diǎn)兩邊將各存儲(chǔ)9個(gè)數(shù)字,一共使用9個(gè)字節(jié):小數(shù)點(diǎn)前的數(shù)字用4個(gè)字節(jié),小數(shù)點(diǎn)后的數(shù)字用4個(gè)字節(jié),小數(shù)點(diǎn)本身占1個(gè)字節(jié)

浮點(diǎn)類型在存儲(chǔ)同樣范圍的值時(shí),通常比decimal使用更少的空間。float使用4個(gè)字節(jié)存儲(chǔ)。double占用8個(gè)字節(jié)

因?yàn)樾枰~外的空間和計(jì)算開(kāi)銷,所以應(yīng)該盡量只在對(duì)小數(shù)進(jìn)行精確計(jì)算時(shí)才使用decimal——例如存儲(chǔ)財(cái)務(wù)數(shù)據(jù)。但在數(shù)據(jù)量比較大的時(shí)候,可以考慮使用bigint代替decimal

 

4、字符串(char,varchar,_text)

char(n)固定長(zhǎng)度,最多255個(gè)字符

varchar(n)可變長(zhǎng)度,最多65535個(gè)字符

tinytext可變長(zhǎng)度,最多255個(gè)字符

text可變長(zhǎng)度,最多65535個(gè)字符

mediumtext可變長(zhǎng)度,最多2的24次方-1個(gè)字符

longtext可變長(zhǎng)度,最多2的32次方-1個(gè)字符

BINARY(M)固定長(zhǎng)度,可存二進(jìn)制或字符,長(zhǎng)度為0-M字節(jié)

VARBINARY(M)可變長(zhǎng)度,可存二進(jìn)制或字符,允許長(zhǎng)度為0-M字節(jié)

內(nèi)建類型:ENUM枚舉, SET集合

 

char和varchar:

?1.char(n)若存入字符數(shù)小于n,則以空格補(bǔ)于其后,查詢之時(shí)再將空格去掉。所以char類型存儲(chǔ)的字符串末尾不能有空格,varchar不限于此。

?2.char(n)固定長(zhǎng)度,char(4)不管是存入幾個(gè)字符,都將占用4個(gè)字節(jié),varchar是存入的實(shí)際字符數(shù)+1個(gè)字節(jié)(n< n>255),所以varchar(4),存入3個(gè)字符將占用4個(gè)字節(jié)。

?3.char類型的字符串檢索速度要比varchar類型的快

varchar和text:

?1.varchar可指定n,text不能指定,內(nèi)部存儲(chǔ)varchar是存入的實(shí)際字符數(shù)+1個(gè)字節(jié)(n< n>255),text是實(shí)際字符數(shù)+2個(gè)字節(jié)。

?2.text類型不能有默認(rèn)值

?3.varchar可直接創(chuàng)建索引,text創(chuàng)建索引要指定前多少個(gè)字符。varchar查詢速度快于text

 

5.二進(jìn)制數(shù)據(jù):BLOB

?BLOB和text存儲(chǔ)方式不同,TEXT以文本方式存儲(chǔ),英文存儲(chǔ)區(qū)分大小寫(xiě),而B(niǎo)lob是以二進(jìn)制方式存儲(chǔ),不分大小寫(xiě)

?BLOB存儲(chǔ)的數(shù)據(jù)只能整體讀出

?TEXT可以指定字符集,BLOB不用指定字符集

6.日期時(shí)間類型

?date日期 '2008-12-2'

?time時(shí)間 '12:25:36'

?datetime日期時(shí)間 '2008-12-2 22:06:44'

?timestamp自動(dòng)存儲(chǔ)記錄修改時(shí)間

?YEAR(2), YEAR(4):年份

timestamp字段里的時(shí)間數(shù)據(jù)會(huì)隨其他字段修改的時(shí)候自動(dòng)刷新,這個(gè)數(shù)據(jù)類型的字段可以存放這條記錄最后被修改的時(shí)間

 

修飾符

所有類型:

?NULL數(shù)據(jù)列可包含NULL值

?NOT NULL數(shù)據(jù)列不允許包含NULL值

?DEFAULT默認(rèn)值

?PRIMARY KEY主鍵

?UNIQUE KEY唯一鍵

?CHARACTER SET name指定一個(gè)字符集

數(shù)值型

?AUTO_INCREMENT自動(dòng)遞增,適用于整數(shù)類型

?UNSIGNED無(wú)符號(hào)

 

示例

CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,
name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);

DESC students;

CREATE TABLE students2 (id int UNSIGNED NOT NULL ,
name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));

 

表操作

DROP TABLE [IF EXISTS] 'tbl_name'; [CASCADE](級(jí)聯(lián)刪除)

ALTER TABLE 'tbl_name'

字段:

添加字段:add

ADD col1 data_type [FIRST|AFTER col_name]

刪除字段:drop

修改字段:

alter(默認(rèn)值), change(字段名), modify(字段屬性)

索引:

添加索引:add index

刪除索引: drop index

表選項(xiàng)

修改:

查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;

查看幫助:Help ALTER TABLE

 

修改表示例

ALTER TABLE students RENAME s1;
ALTER TABLE s1 ADD phone varchar(11) AFTER name;
ALTER TABLE s1 MODIFY phone int;
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);
ALTER TABLE s1 DROP COLUMN mobile;
Help ALTER TABLE 查看幫助

 

修改表示例

ALTER TABLE students ADD gender ENUM('m','f')(enum單選/枚舉,set多選)
ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
ALTER TABLE students ADD UNIQUE KEY(name);
ALTER TABLE students ADD INDEX(age);
DESC students;
SHOW INDEXES FROM students;
ALTER TABLE students DROP age;

 

DML語(yǔ)句

DML:INSERT, DELETE, UPDATE, SELECT

INSERT:

一次插入一行或多行數(shù)據(jù)

語(yǔ)法

INSERT [L OW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,...)]

{VALUES | VALUE} ({expr | DEFAULT},...),(...),...

[ ON DUPLICATE KEY UPDATE如果重復(fù)更新之

col_name=expr

[, col_name=expr] ... ]

簡(jiǎn)化寫(xiě)法:

INSERT tbl_name [(col1,...)] VALUES (val1,...), (val21,...)

 

DML語(yǔ)句

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

SET col_name={expr | DEFAULT}, ...

[ ON DUPLICATE KEY UPDATE

col_name=expr

[, col_name=expr] ... ]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,...)]

SELECT ...

[ ON DUPLICATE KEY UPDATE

col_name=expr

[, col_name=expr] ... ]

 

DML語(yǔ)句

UPDATE:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

注意:一定要有限制條件,否則將修改所有行的指定字段

限制條件:

WHERE

LIMIT

Mysql選項(xiàng):--safe-updates| --i-am-a-dummy|-U

 

DML語(yǔ)句

DELETE:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

可先排序再指定刪除的行數(shù)

注意:一定要有限制條件,否則將清空表中的所有數(shù)據(jù)

限制條件:

WHERE

LIMIT

TRUNCATE TABLE tbl_name;清空表

 

DQL語(yǔ)句

SELECT

[ALL | DISTINCT | DISTINCTROW ]

[SQL_CACHE | SQL_NO_CACHE]

select_expr [, select_expr ...]

[FROM table_references

[WHERE where_condition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[FOR UPDATE | LOCK IN SHARE MODE]

 

SELECT

字段顯示可以使用別名:

col1 AS alias1, col2 AS alias2, ...(AS可不寫(xiě))

WHERE子句:指明過(guò)濾條件以實(shí)現(xiàn)“選擇”的功能:

過(guò)濾條件:布爾型表達(dá)式

算術(shù)操作符:+, -, *, /, %

比較操作符:=, !=, <>, <=, >, >=, <, <=

BETWEEN min_num AND max_num

IN (element1, element2, ...)

IS NULL

IS NOT NULL

 

SELECT

DISTINCT去除重復(fù)列

SELECT DISTINCT gender FROM students;

LIKE:

%:任意長(zhǎng)度的任意字符

_:任意單個(gè)字符

RLIKE:正則表達(dá)式,索引失效,不建議使用

REGEXP:匹配字符串可用正則表達(dá)式書(shū)寫(xiě)模式,同上

邏輯操作符:

NOT

AND

OR

XOR

 

SELECT

GROUP:根據(jù)指定的條件把查詢結(jié)果進(jìn)行“分組”以用于做“聚合”運(yùn)算

avg(), max(), min(), count(), sum()

建議:一旦用分組,前邊select只需要寫(xiě)用以分組的字段,和統(tǒng)計(jì)的函數(shù),寫(xiě)別的字段沒(méi)有意義

HAVING:對(duì)分組聚合運(yùn)算后的結(jié)果指定過(guò)濾條件(在分組前做過(guò)濾用where)

ORDER BY:根據(jù)指定的字段對(duì)查詢結(jié)果進(jìn)行排序

升序:ASC

降序:DESC

示例:

MariaDB [db1]> select * from students order by score;順序,NULL在前

MariaDB [db1]> select * from students order by -score desc;順序,但NULL在后

LIMIT [[offset,]row_count]:對(duì)查詢的結(jié)果進(jìn)行輸出行數(shù)數(shù)量限制

對(duì)查詢結(jié)果中的數(shù)據(jù)請(qǐng)求施加“鎖”

FOR UPDATE:寫(xiě)鎖,獨(dú)占或排它鎖,只有一個(gè)讀和寫(xiě)

LOCK IN SHARE MODE:讀鎖,共享鎖,同時(shí)多個(gè)讀(但只能有一個(gè)寫(xiě))

 

示例

DESC students;
INSERT INTO students VALUES(1,'tom','m'),(2,'alice','f');
INSERT INTO students(id,name) VALUES(3,'jack'),(4,'allen');
SELECT * FROM students WHERE id < 3;
SELECT * FROM students WHERE gender='m';
SELECT * FROM students WHERE gender IS NULL;
SELECT * FROM students WHERE gender IS NOT NULL;
SELECT * FROM students ORDER BY name DESC LIMIT 2;
SELECT * FROM students ORDER BY name DESC LIMIT 1,2;
SELECT * FROM students WHERE id >=2 and id <=4
SELECT * FROM students WHERE BETWEEN 2 AND 4
SELECT * FROM students WHERE name LIKE 't%'
SELECT * FROM students WHERE name RLIKE '.*[lo].*';
SELECT id stuid,name as stuname FROM students

 

練習(xí)

練習(xí)數(shù)據(jù)庫(kù)下載鏈接:https://pan.baidu.com/s/11Qk9yI9lx6oZVCGXhvQ6PQ

下載其中的hellodb_innodb.sql,輸命令mysql < hellodb_innodb.sql生成一個(gè)hellodb數(shù)據(jù)庫(kù):

[root@centos7 ~]#mysql  #連接mariadb
MariaDB [(none)]> use hellodb  #使用hellodb數(shù)據(jù)庫(kù)
MariaDB [hellodb]> show tables;  #共有7張表

+-------------------+

| Tables_in_hellodb |

+-------------------+

| classes           |

| coc               |

| courses           |

| scores            |

| students          |

| teachers          |

| toc               |

+-------------------+

 

M            
            
                        
當(dāng)前標(biāo)題:SQL語(yǔ)句簡(jiǎn)介及練習(xí)
本文來(lái)源:http://weahome.cn/article/jsppch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部