最近剛剛開始學習Mysql
,然而學習MySql
必經的一個過程就是SQL語句
,只有按照文檔從頭開始學習SQL
語句。學習的過程是痛苦的,可是學完的成果是甘甜的。sql
全部的 SQL 語句都如下列關鍵字之一開始:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW
,並以一個分號(;
)結束。數據庫
有一點須要特別注意:SQL
不區分大小寫,也就是說SELECT
和select
在SQL
語句中有相同的含義。然而,MySQL
在表的名稱方面並不遵循此規定。因此,若是你在使用MySQL
的話,你須要在程序中嚴格按照它們在數據庫中名字進行使用。學習
SQL語句
中使用*
表明通配符。spa
SELECT
SELECT
關鍵字用來從數據中查詢數據。code
語法排序
SELECT 查詢字段 FROM 表名; // 在 loglists 表中查詢 id,name 兩個字段 SELECT id,name FROM `loglists`;
SELECT DISTINCT
SELECT DISTINCT
語句用於返回惟一不一樣的值。ci
語法文檔
SELECT DISTINCT 查詢字段 FROM 表名; // 查詢 loglists 表中 content,name 所有不相同數據 SELECT DISTINCT content,name FROM `loglists`;
若SELECT DISTINCT
查詢多個字段的話,會根據當前的這些字段中的值所有不相同的數據。在使用時須要注意的是,不要把惟一主鍵做爲查詢條件。it
WHERE
WHERE
子句用於提取那些知足指定標準的記錄。table
語法
SELECT 查詢字段 FROM 表名 WHERE 查詢條件; // 查詢 loglists 表中 content爲111 的數據,查詢字段包括 content,name,id SELECT content,name,id FROM loglists WHERE content="111";
AND
第一個條件和第二個條件都成立,則AND
運算符顯示一條記錄。
語法
SELECT 查詢字段 FROM 表名 WHERE 條件 AND 條件; // 查詢 loglists 表中 content="111" 而且 id<=150 的數據,查詢字段包括 id,content,name SELECT id,content,name FROM loglists WHERE content="111" AND id<=150;
若是有多個條件能夠連續AND
查詢。
OR
第一個條件和第二個條件中只要有一個成立,則OR
運算符顯示一條記錄。
語法
SELECT 查詢字段 FROM 表名 WHERE 條件 OR 條件; // 查詢 loglists 表中 content="111" 或 id<=150 的數據,查詢字段包括 id,content,name SELECT id,content,name FROM loglists WHERE content="111" OR id<=150;
若是有多個條件能夠連續OR
查詢。
AND
與OR
同時使用。
// 查詢 loglists 表中 content="111" 而且 id<=150 或者 name="111" 的數據,查詢數據包括 id,content,name SELECT id,content,name FROM loglists WHERE content="111" AND id<=150 OR name="111";
ORDER BY
ORDER BY
關鍵字用於對結果集進行排序。
CN
的排前面,同屬USA
的排後面。CN
的這些多行數據中,再根據alexa
值的大小排列。ORDER BY
排列時,不寫明ASC DESC
的時候,默認是ASC
。ASC
升序DESC
降序
語法
SELECT 字段 FROM 表名 ORDER BY 字段 ASC|DESC; // 查詢 loglists 包括字段 id,content,name // 先將 name 升序排列,把查詢的數據再按照content查詢分區塊,按降序排序 SELECT id,content,name FROM loglists ORDER BY name ASC,content DESC;
INSERT INTO
INSERT INTO
語句用於向表中插入新記錄。
語法
INSERT INTO 表名 (添加字段) VALUES (值); // 向 loglists 中添加一條數據 字段爲 name,content,text 值爲 "aaron","my's aaron","haha" INSERT INTO loglists (name,content,text) VALUES ("aaron","my's aaron","haha");
下面這種也是插入一條數據帶有條件查詢
// 向 loglists 中插入一條數據 // 插入的數據爲 loglists 表中 content = 123 的結構 INSERT INTO loglists SELECT * FROM loglists WHERE content = "123";
上面這種寫寫法須要注意:
主鍵
不能相同,一旦相同則會拋出錯誤UPDATE
UPDATE
語句用於更新表中的記錄。
語法
UPDATE 代表 SET 更新數據(name="liergou") WHERE 條件; // 更新loglists表 // name="liergou",text="eroguzi",content="ok" // 根據 id=1 或 text="999" // 查找數據並更新 UPDATE loglists SET name="liergou",text="eroguzi",content="ok" WHERE id=1 OR text="999";
DELETE
DELETE
語句用於刪除表中的記錄。
語法
DELETE FROM 表名 WHERE 查詢條件; // 刪除 loglists 中 id=1 或 text="angie" 的數據 DELETE FROM loglists WHERE id=1 OR text="angie";
刪除全部數據:
DELETE FROM table_name; DELETE * FROM table_name;
++友情提示:在刪除記錄時要格外當心!由於不能重來!++
LIMIT
截取查詢數據。
語法
SELECT 字段 FROM 表名 ORDER BY 查詢字段 ASC LIMIT 截取位數; // 在 loglists 表中 // 按id升序排列,截取1-3位 SELECT * FROM loglists ORDER BY id ASC LIMIT 3;
若是LIMIT
後面只有一個數則默認爲1-n
之間。
在看SQL
語句的時候看到有個一TOP
語句,可是在Mysql
使用的時候,報錯。
Mysql
中實現相似TOP
語句:
SELECT * FROM loglists ORDER BY id ASC LIMIT 1,3;
LIKE
LIKE
操做符用於在WHERE
子句中搜索列中的指定模式。
語法
SELECT 字段 FROM 表名 WHERE 搜索字段 LIKE 條件; // 查詢 loglists 表中 text 字段 // text含有a字母 // 包含全部字段 SELECT * FROM loglists WHERE name LIKE "%a%";
模糊搜索規則:
a
結尾的數據a
開頭的數據a
的數據a
的a
的a
的IN
IN
操做符容許在WHERE
子句中規定多個值。
語法
SELECT 字段 FROM 表名 WHERE 查詢字段 in 查詢條件; // 在 loglists 查詢 name 字段爲 a 或 b的數據 SELECT * FROM loglists WHERE name in ("a","b");
若不使用IN
操做符也是能夠實現的:
SELECT * FROM loglists WHERE name="a" OR name="b";
這樣的寫法與上面是等價的。
BETWEEN
BETWEEN
操做符用於選取介於兩個值之間的數據範圍內的值。
語法
SELECT 字段 from 代表 WHERE 條件字段 BETWEEN 條件1 AND 條件2; // 在 loglists 表中查詢 id 爲 9-11之間的數據 SELECT * from loglists WHERE id BETWEEN 9 AND 11;
JOIN 與 INNER JOIN
join
用於把來自兩個或多個表的行結合起來。INNER JOIN1
產生的結果集中,是表1和表二2的交集。
語法
SELECT 字段(loglists.id) FROM 表1 INNER JOIN 表2 ON 條件; // 查詢 loglists 與 children 表 // loglists.id 與 children.cid 相同的數據 // 查詢字段爲 // loglists.id, // loglists.name, // children.age, // loglists.content, // loglists.text SELECT l.id, l.name, c.age, l.content, l.text FROM loglists AS l INNER JOIN children AS c ON l.id = c.cid;
LEFT JOIN
LEFT JOIN
關鍵字從左表(table1
)返回全部的行,即便右表(table2
)中沒有匹配。若是右表中沒有匹配,則結果爲NULL
。
語法
SELECT 字段 FROM 表1 LEFT JOIN 表二 ON 條件; // 查詢 loglists 與 children 表 // loglists.id 與 children.cid 相同的數據 // 查詢字段爲 // loglists.id, // loglists.name, // children.age, // loglists.content, // loglists.text SELECT l.id, l.`name`, c.age, l.text, l.content FROM loglists AS l LEFT JOIN children AS c ON l.id = c.age;
查詢數據以下:
id | name | age | text | content |
---|---|---|---|---|
12 | aaron | 12 | 簡介 | 什麼都沒有 |
13 | angie | null | 簡介 | 有點東西 |
RIGHT JOIN
RIGHT JOIN
關鍵字從右表(table2
)返回全部的行,即便左表(table1
)中沒有匹配。若是左表中沒有匹配,則結果爲NULL
。
語法
SELECT 字段 FROM 表1 RIGHT JOIN 表二 ON 條件; // 查詢 loglists 與 children 表 // loglists.id 與 children.cid 相同的數據 // 查詢字段爲 // loglists.id, // loglists.name, // children.age, // loglists.content, // loglists.text SELECT l.id, c.age, l.`name`, l.text, l.content FROM loglists AS l RIGHT JOIN children AS c ON l.id=c.age;
查詢數據以下:
id | name | age | text | content |
---|---|---|---|---|
12 | aaron | 12 | 簡介 | 什麼都沒有 |
null | null | 55 | null | null |
null | null | 77 | null | null |
簡單的作了一些筆記,雖然很基礎我的以爲很實用,若是哪裏有錯誤,請在下方留言指正,我會盡快作出修改。