天天看點

MySQL學習筆記

SQL 是一種标準 - 但是...

不幸地是,存在着很多不同版本的 SQL 語言,但是為了與 ANSI 标準相相容,它們必須以相似的方式共同地來支援一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

注釋:除了 SQL 标準之外,大部分 SQL 資料庫程式都擁有它們自己的私有擴充!

RDBMS 指的是關系型資料庫管理系統。

RDBMS 是 SQL 的基礎,同樣也是所有現代資料庫系統的基礎,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。

注意:SQL 對大小寫不敏感!

SQL DML 和 DDL

可以把 SQL 分為兩個部分:資料操作語言 (DML) 和 資料定義語言 (DDL)。 

SQL 的 DML 部分:

    SELECT - 從資料庫表中擷取資料

    UPDATE - 更新資料庫表中的資料

    DELETE - 從資料庫表中删除資料

    INSERT INTO - 向資料庫表中插入資料

SQL 中最重要的 DDL 語句:

    CREATE DATABASE - 建立新資料庫

    ALTER DATABASE - 修改資料庫

    CREATE TABLE - 建立新表

    ALTER TABLE - 變更(改變)資料庫表

    DROP TABLE - 删除表

    CREATE INDEX - 建立索引(搜尋鍵)

    DROP INDEX - 删除索引

DISTINCT 關鍵詞 DISTINCT 用于傳回唯一不同的值

SELECT DISTINCT Company FROM Orders 

引号的使用

請注意,我們在例子中的條件值周圍使用的是單引号。

SQL 使用單引号來環繞文本值(大部分資料庫系統也接受雙引号)。如果是數值,請不要使用引号。

結合 AND 和 OR 運算符

我們也可以把 AND 和 OR 結合起來(使用圓括号來組成複雜的表達式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'; 

ORDER BY 語句預設按照升序對記錄進行排序。

SQL 通配符

SQL 通配符必須與 LIKE 運算符一起使用。

%     替代一個或多個字元

_     僅替代一個字元

[charlist]     字元列中的任何單一字元

[^charlist] 或者 [!charlist]    不在字元列中的任何單一字元

從上面的 "Persons" 表中選取名字的第一個字元之後是 "eorge" 的人:

SELECT * FROM Persons WHERE FirstName LIKE '_eorge'; 

從上面的 "Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人:

SELECT * FROM Persons WHERE City LIKE '[ALN]%'; 

從上面的 "Persons" 表中選取居住的城市不以 "A" 或 "L" 或 "N" 開頭的人:

SELECT * FROM Persons WHERE City LIKE '[!ALN]%'; 

BETWEEN ... AND 和 NOT BETWEEN ... AND

SELECT * FROM aa WHERE pid BETWEEN 2 AND 6;(mysql中包含2和6) 

SELECT * FROM aa WHERE pid not BETWEEN 2 AND 6; 

SQL Alias(别名)

表的 SQL Alias 文法:

SELECT a.pid FROM book AS a WHERE a.pid=6; 

列的 SQL Alias 文法:

SELECT pid AS a,title AS b FROM book; 

SQL join (連接配接)用于根據兩個或多個表中的列之間的關系,從這些表中查詢資料。

INNER JOIN(内連接配接):

SELECT * FROM book INNER JOIN USER ON book.id=user.bookid; 

注釋:INNER JOIN 與 JOIN 是相同的。

LEFT JOIN(左連接配接):

LEFT JOIN 關鍵字會從左表 (table_name1) 那裡傳回所有的行,即使在右表 (table_name2) 中沒有比對的行。

SELECT * FROM book LEFT JOIN USER ON book.id=user.bookid; 

RIGHT JOIN(右連接配接):

RIGHT JOIN 關鍵字會右表 (table_name2) 那裡傳回所有的行,即使在左表 (table_name1) 中沒有比對的行。

SELECT * FROM book RIGHT JOIN USER ON book.id=user.bookid; 

FULL JOIN (全連接配接):

隻要其中某個表存在比對,FULL JOIN 關鍵字就會傳回行。

注意:mysql不支援full join。

UNION (聯合)

UNION 操作符用于合并兩個或多個 SELECT 語句的結果集(兩表要聯合查詢的字段名必須相同,或者*)。

SELECT NAME FROM book UNION SELECT NAME FROM user; 

注釋:預設地,UNION 操作符選取不重複的值。如果允許重複的值,請使用 UNION ALL。

SELECT NAME FROM book UNION ALL SELECT NAME FROM user; 

SELECT INTO 語句

SELECT INTO 語句從一個表中選取資料,然後把資料【插入】另一個表中。

SELECT INTO 語句常用于建立表的備份複件或者用于對記錄進行存檔。

注意:mysql不支援此操作。可用下語句替換:

CREATE TABLE book2 (SELECT * FROM book);//沒有book2表情況下 

INSERT INTO book2 (SELECT * FROM book);//已經有book2表情況下 

mysql表類型:MySQL 資料表七種類型 ,分别是:BDB、HEAP、ISAM、MERGE、MYISAM、InnoBDB、MERGE。

NULL 值是遺漏的未知資料。預設地,表的列可以存放 NULL 值。

NULL 用作未知的或不适用的值的占位符。注釋:無法比較 NULL 和 0;它們是不等價的。

無法使用比較運算符來測試 NULL 值,比如 =, <, 或者 <>。我們必須使用 IS NULL 和 IS NOT NULL 操作符。

1、等價于沒有任何值、是未知數。

2、NULL與0、空字元串、空格都不同,NULL沒有配置設定存儲空間。

3、對空值做加、減、乘、除等運算操作,結果仍為空。

4、NULL的處理使用NVL函數。

5、比較時使用關鍵字用“is null”和“is not null”。

6、空值不能被索引,是以查詢時有些符合條件的資料可能查不出來,count(*)中,用nvl(列名,0)處理後再查。

7、排序時比其他資料都大(索引預設是降序排列,小→大),是以NULL值總是排在最後。

      本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/965516,如需轉載請自行聯系原作者