先總結(jié)
sql語句按W3Cschool上分類有數(shù)據(jù)庫操作語言和數(shù)據(jù)庫定義語言兩個部分組成徽曲,根據(jù)那那種分法可以讓我們更好的理解SQL陷谱,另外自己在網(wǎng)上找到一張圖片绞惦,可以讓我更好的寫出SQL語句易核。在后期的學(xué)習(xí)中在一一在每條SQL語句下補上學(xué)習(xí)心得狼电。
mysql執(zhí)行順序
SQL包括兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL)。
DML部分:
- SELECT - 從數(shù)據(jù)庫獲取數(shù)據(jù)
- UPDATE - 更新數(shù)據(jù)庫數(shù)據(jù)
- DELETE - 刪除數(shù)據(jù)庫數(shù)據(jù)
- INSERT INTO - 向數(shù)據(jù)庫中插入數(shù)據(jù)
DDL重要部分:
- CREATE DATABASE - 常見數(shù)據(jù)庫
- ALTER DATABASE - 修改數(shù)據(jù)庫
- CREATE TABLE - 創(chuàng)建表
- ALTER TABLE - 修改表
- DROP TABLE - 刪除表
- CREATE INDEX - 創(chuàng)建索引
- DROP INDEX - 刪除索引
數(shù)據(jù)庫
- show database 查看所有數(shù)據(jù)庫
- use database_name 選數(shù)據(jù)庫
- show tables 查看指定數(shù)據(jù)庫中的所有表
- rename table old_name to new_name 修改表名
基礎(chǔ)用法
1.select語句:從表中選取數(shù)據(jù)盆均,結(jié)果放在一個結(jié)果表中
SELECT 列名稱 FROM 表名稱
2.select distinct:從表中選出唯一的值
SELECT DISTINCT 列名稱 FROM 表名稱
3.where 子句:有條件的從表中選擇數(shù)據(jù)
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
其中操作符between表示兩者之間塞弊,like表示按某種搜索模式
4.and & or:基于一個以上的條件對記錄進行過濾,用于where子句中
5.order by:用于根據(jù)指定的列(可以多列)對數(shù)據(jù)結(jié)果集進行排序泪姨;倒序DESC游沿,ASC
正序。
6.insert into:向表中插入新的行
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
7.update:修改表中的數(shù)據(jù)
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
8.delete:刪除表中的行
DELETE FROM 表名稱 WHERE 列名稱 = 值
9.limit:規(guī)定要返回記錄的數(shù)目
SELECT * FROM TABLE_NAME LIMIT NUM
where子句的各種操作
10.like:在where的子句中搜索列的指定模式
用好通配符:
%:替代一個或多個字符
“估-:替代一個字符
[ ABC]:ABC中的任何一個
[!ABC]:不包括ABC任何一個
11.in:規(guī)定where子句中規(guī)定多個值
12.between and:where子句中選取介于兩個值之間的范圍(mysql包括兩端)
13.alias:為列名稱和表名稱建立別號
表的alias語法:select column_name from table_name as alias_name
列的alias語法:select column_name as alias_name from table_name
join操作
14.join:用于根據(jù)兩個或多個表中的列之間的關(guān)系诀黍,從這些表中查詢數(shù)據(jù)
15.inner join:內(nèi)連接,在表中存在至少存在一個匹配時仗处,該關(guān)鍵字返回行
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
16.left join:左鏈接眯勾,此關(guān)鍵字會從左表(table_name1)中返回所有行枣宫,即 使在有右表(table_name2)中沒有匹配
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
17.right join:右鏈接,此關(guān)鍵字會在右表(table_name2)返回所有行吃环,即使在左表
(table_name1)中沒有匹配的行
18.full join:只要其中某個表存在匹配也颤,此關(guān)鍵字就會返回左右表均有的行
多表操作
19.union:用于合并兩個或者多個select語句,使用“union all”可以包括重復(fù)的值
20.select into:從一個表中選取數(shù)據(jù)插入另一個表郁轻,主要用于備份數(shù)據(jù) 〕崛ⅰSELECT */column_name
INTO new_table_name [ in externaldatabase]
FROM table_name1
INNER JOIN table_name2
ON Person.Id_P = Orders.Id_P
21.CREATE DATABASE database_name:創(chuàng)建數(shù)據(jù)庫
22.CREATE TABLE table_name(
列名稱1,列類型
列名稱2好唯,列類型
列名稱3竭沫,列類型
)
SQL約束
約束:用于顯示加入表中列的數(shù)據(jù)類型,可在建表時(CREATE TABLE)或者建表后(ALTER TABLE)
23.NOT NULL:強制不接受NULL值骑篙,如果不包括值時就不能插入
24.UNIQUE:唯一標(biāo)識數(shù)據(jù)庫中的每條記錄蜕提。
- UNIQUE(Id_P)
- CONSTRAINT uc_PersonID UNIQUE(Id_P, lastname)
- ALTER TABLE persons ADD UNIQUE(Id_P)
- ALTER TABLE persons ADD CONSTRAINT us_PersonID UNIQUE( Id_P, lastname )
- ALTER TABLE persons DROP INDEX person_id
25.PRIMARY KEY:用法與上面一樣,但還是KEY每個表只有一個替蛉,而unique可以有多個
- PRIMARY KEY (id_p)
- CONSTRAINT us_personID PRIMARY KEY (id_p贯溅,last name)
- ALTER TABLE persons ADD PRIMARY KEY (id_P)
- ALTER TABLE persons ADD CONSTRAINT uc_personId PRIMARY KEY (p_id, person_id)
- ALTER TABLE persons DROP PRIMARY KEY
26.FOREIGN KEY:指向另一個表中的PRIMARY KEY
- FOREIGN KEY (p_id) REFERENCES persons (p_id)
- CONSTRAINT uc_personID FOREIGN KEY (p_id) REFERENCES persons (p_id)
- ALTER TABLE orders ADD FOREIGN KEY (p_id) REFERENCES persons (p_id)
- ALTER TABLE orders ADD CONSTRAINT uc_personID FOREIGN KEY (p_id) REFERENCES persons (p_id)
- ALTER TABLE orders DROP FOREIGN KEY (p_id)
27.CHECK:用于限制列中值的范圍
- CHECK (ID_p > 0)
- CONSTRAINT chk_person CHECK( ID_P >0 AND city = 'Sandnes')
- ALTER TABLE persons ADD CHECK (ID_p > 0)
- ALTER TABLE persons ADD CONSTRAINT chk_persons CHECK( ID_P >0 AND city = 'Sandnes')
- ALTER TABLE persons DROP CHECK chk_person
28.DEFAULT:用于向列中插入默認(rèn)值
- DEFAULT "值"
- ALTER TABLE persons
ALTER City Set DEFAULT "值" - ALTER TABLE persons
ALTER City DROP DEFAULT
引用
CREATE INDEX用于在表中創(chuàng)建索引拄氯,在不讀取表的情況下躲查,索引使數(shù)據(jù)庫應(yīng)用程序可以更快的查找數(shù)據(jù)
29.CREATE INDEX 語法
- 普通的
CREATE INDEX index_name
ON table_name(column_name) - 唯一的
CREATE UNIQUE INDEX index_name
ON table_name(column_name)
30.DROP語法
ALTER TABLE table_name DROP INDEX index_name
TRUNCATE TABLE 表名稱——清空表
31.ALTER TABLE:用于在已有的表中添加、修改或者刪除列
- 增加列
ALTER TABLE table_name
ADD column_name datatype - 刪除列
ALTER TABLE table_name
DROP COLUMN column_name - 改變列
ALTER TABLE table_name
ALTER COLUMN column_name datatype
32.AUTO-INCREMENT:自動創(chuàng)建主鍵值
33.CREATE VIEW:創(chuàng)建視圖
- 創(chuàng)建視圖
CREATE VIEW [view_name] AS
SELECT column_name
FROM table_name
WHERE condition - 撤銷視圖
DROP VIEW vie_name - 更新視圖
CREATE OR REPLACE VIEW [view_name] AS
注釋:視圖儲存的是一個sql語句译柏,更新視圖只能對沒有計算過的視圖進行操作镣煮,此處有一個algorithm=merge,temptable
34.mysql的Date數(shù)據(jù)類型
- DATE - 格式 : YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式: YYYY 或 YY
35.NULL值是可選字段鄙麦,必須用IS NULL 和IS NOT NULL 操作符
- IFNULL(UnitsOnOrder,0)典唇,null時用-0取代
- COALESCE(UnitsOnOrder,0)
SQL函數(shù)
SELECT function(列) FORM 表
基本類型
- Aggregate 函數(shù):此函數(shù)操作面向一系列的值,并返回單一的值
- Scalar 函數(shù):此函數(shù)操作單一的值胯府,返回基于輸入值的但一值
1.AVG函數(shù):求平均數(shù)
SELECT AVG(column_name) from table_name2.COUNT函數(shù):返回指定列的值的數(shù)目
SELECT COUNT(column_name) from table_name
SELECT COUNT(DISTINCT column_name) from table_name3.FIRST函數(shù):返回指定字段中的第一個記錄的值
SELECT FIRST(column_name) from table_name4.LAST函數(shù):返回指定字段中指定的最后一個記錄的值
SELECT LAST(column_name) from table_name5.MAX函數(shù):返回指定列中最大的值介衔,不包括NULL
SELECT MAX(column_name) from table_name6.MIN函數(shù):返回指定列中最小的值,不包括NULL
SELECT MIN(column_name) from table_name7.SUM函數(shù):返回數(shù)字列的總數(shù)
SELECT SUM(column_name) from table_name8.Group by函數(shù):結(jié)合合計函數(shù)骂因,根據(jù)一個或多個列對結(jié)果集進行分組
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name1炎咖,column_name2
注釋:group沒有順序之分,只要不同就要按不同的組顯示9.Having子句:篩選結(jié)果
10.UCASE函數(shù):把字段的值轉(zhuǎn)換為大寫
SELECT UCASE(column_name) FROM table_name11.LCASE函數(shù):把字段的值轉(zhuǎn)換為小寫
SELECT LCASE(column_name) FROM table_name12.MID函數(shù):從文本字段中提取字符
SELECT MID(column_name,start,length) FROM table_name13.LEN函數(shù):返回文本字段中值的長度
SELECT LEN(column_name) FROM table_name14.ROUND函數(shù):用于把數(shù)字字段舍入為指定的小數(shù)位數(shù)
SELECT ROUND(column_name,decimals) FROM table_name15.NOW函數(shù):返回當(dāng)前的日期和時間
SELECT NOW() FORM table_name16.FORMAT函數(shù):用于對字段的顯示進行格式化
SELECT FORMAT(column_name,format) FROM table_name
唯一性索引:該數(shù)據(jù)列可以為空寒波,但是只要有數(shù)據(jù)就必須保證此列取值的唯一性
數(shù)據(jù)類型:decimal 和 numeric(相同的類型)類型用于保存必須為確切精度的值乘盼,如貨幣數(shù)據(jù),最大位數(shù)為65位俄烁。decimal(5,2):5位绸栅,小數(shù)點后2位
SQL模式:嚴(yán)格和不嚴(yán)格
查看模式:select @@sql_mode;
設(shè)置模式:set global sql_mode= '';
char和varchar區(qū)別:比較時var去掉空格,varchar不去掉空格页屠;
找出非法ENUM列:
select * from tab_name where enum_col=0;