mysql 高级语法,SQL 语法高级
NULL 值
NULL 值是遺漏的未知數據。
默認地,表的列可以存放 NULL 值。
如果表中的某個列是可選的,那么我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味著該字段將以
NULL 值保存。
NULL 值的處理方式與其他值不同。
NULL 用作未知的或不適用的值的占位符。
注釋:無法比較 NULL 和 0;它們是不等價的。
我們要用IS NULL和IS NOT NULL來判斷列的值。
NULL 函數
如果 “UnitsOnOrder” 是 NULL,則不利于計算,因此如果值是 NULL 則返回 0。
SQL Server / MS Access1
2SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
Oracle 沒有 ISNULL() 函數。不過,我們可以使用 NVL() 函數達到相同的結果:
1
2SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL 也擁有類似 ISNULL() 的函數。不過它的工作方式與微軟的 ISNULL()
函數有點不同。
在 MySQL 中,我們可以使用 IFNULL() 函數,就像這樣:
1
2SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數,就像這樣:
1
2SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
TOP 子句
TOP 子句用于規定要返回的記錄的數目。
對于擁有數千條記錄的大型表來說,TOP 子句是非常有用的。
注釋:并非所有的數據庫系統都支持 TOP 子句。
SQL Server 的語法:
1
2SELECT TOP number|percent column_name(s)
FROM table_name
MySQL 和 Oracle 中的 SQL SELECT TOP 是等價的
MySQL 語法
1
2
3SELECT column_name(s)
FROM table_name
LIMIT number
例子
1
2
3
4
5
6
7SELECT *
FROM Persons
LIMIT 5
Oracle 語法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
例子
1
2
3SELECT *
FROM Persons
WHERE ROWNUM <= 5
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符語法
1
2
3SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
通配符 描述
% 替代一個或多個字符
_ 僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]\ 不在字符列中的任何單一字符
或者\
[!charlist]
IN 操作符
IN 操作符允許我們在 WHERE 子句中規定多個值。
SQL IN 語法
1
2
3SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
BETWEEN 操作符
操作符 BETWEEN … AND
會選取介于兩個值之間的數據范圍。這些值可以是數值、文本或者日期。
BETWEEN 語法
1
2
3
4SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
Alias
表的 SQL Alias 語法
1
2
3SELECT column_name(s)
FROM table_name
AS alias_name
列的 SQL Alias 語法
1
2SELECT column_name AS alias_name
FROM table_name
Alias 實例: 使用表名稱別名
假設我們有兩個表分別是:”Persons” 和
“Product_Orders”。我們分別為它們指定別名 “p” 和 “po”。
現在,我們希望列出 “John Adams” 的所有定單。
我們可以使用下面的 SELECT 語句:
1
2
3SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用別名的 SELECT 語句:
1
2
3SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
從上面兩條 SELECT 語句您可以看到,別名使查詢程序更易閱讀和書寫。
UNION 操作符
UNION 操作符用于合并兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT
語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT
語句中的列的順序必須相同。
SQL UNION 語法
1
2
3SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION
ALL。
SQL UNION ALL 語法
1
2
3SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 結果集中的列名總是等于 UNION 中第一個 SELECT 語句中的列名。
GROUP BY 語句
GROUP BY 語句用于結合合計函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 語法
1
2
3
4SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。
SQL HAVING 語法
1
2
3
4
5SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
SELECT INTO 語句
SELECT INTO 語句從一個表中選取數據,然后把數據插入另一個表中。
SELECT INTO 語句常用于創建表的備份復件或者用于對記錄進行存檔。
SQL SELECT INTO 語法
您可以把所有的列插入新表:
1
2
3SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
或者只把希望的列插入新表:
1
2
3SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
總結
以上是生活随笔為你收集整理的mysql 高级语法,SQL 语法高级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab apfc,APFC-Boo
- 下一篇: mysql中的merge into,SQ