mySql入門-(二)

最近剛剛開始學習Mysql,然而學習MySql必經的一個過程就是SQL語句,只有按照文檔從頭開始學習SQL語句。學習的過程是痛苦的,但是學完的成果是甘甜的。

SQL 語法

所有的 SQL 語句都以下列關鍵字之一開始:SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW,並以一個分號(;)結束。

有一點需要特別注意:SQL不區分大小寫,也就是說SELECTselectSQL語句中有相同的含義。然而,MySQL在表的名稱方面並不遵循此規定。所以,如果你在使用MySQL的話,你需要在程序中嚴格按照它們在數據庫中名字進行使用。

SQL語句中使用*代表通配符。

SELECT

SELECT關鍵字用來從數據中查詢數據。

語法

SELECT 查詢字段 FROM 表名;
//  在 loglists 表中查詢 id,name 兩個字段
SELECT id,name FROM `loglists`;
SELECT DISTINCT

SELECT DISTINCT語句用於返回唯一不同的值。

語法

SELECT DISTINCT 查詢字段 FROM 表名;
//  查詢 loglists 表中 content,name 全部不相同數據
SELECT DISTINCT content,name FROM `loglists`;

SELECT DISTINCT查詢多個字段的話,會根據當前的這些字段中的值全部不相同的數據。在使用時需要注意的是,不要把唯一主鍵作爲查詢條件。

WHERE

WHERE子句用於提取那些滿足指定標準的記錄。

語法

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查詢。

ANDOR同時使用。

//  查詢 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關鍵字用於對結果集進行排序。

  1. 先將查詢值這一列排序,同爲CN的排前面,同屬USA的排後面。
  2. 然後在同屬CN的這些多行數據中,再根據alexa值的大小排列。
  3. 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";

上面這種寫寫法需要注意:

  1. 插入表中與查到的表中的主鍵不能相同,一旦相同則會拋出錯誤
  2. 若查詢表中有多條數據,則會重複添加多條數據
  3. 要求表必須存在
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%";

模糊搜索規則:

  1. '%a':以a結尾的數據
  2. 'a%':以a開頭的數據
  3. '%a%':含有a的數據
  4. '_a_':三位且中間字母是a
  5. '_a':兩位且結尾字母是a
  6. '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的交集。

img_innerjoin.gif

語法

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

img_leftjoin.gif

語法

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

img_rightjoin.gif

語法

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

總結

簡單的做了一些筆記,雖然很基礎個人覺得很實用,如果哪裏有錯誤,請在下方留言指正,我會盡快做出修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章