SQL进阶语法(笔记)

SELESCT TOP子句==>指定返回记录的数量

注意:1)不是所有的数据库都支持。2) MySQL==> LIMIT     ORACLE ==> ROWNUM
MySQL中的用法

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

ORACLE中的用法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM<=number;

eg(MySQL):

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;

LIKE操作符==> 模糊匹配查询

两个通配符(极其重要):
    1)% - 匹配0个、1个及多个字符
    2)_ - 匹配单个字符
LIKE语法

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

eg:(选择客户名称以a结尾的所有客户)

SELECT *EROM Customers
WHERE CustomerName LIKE "%a";

Wildcards通配符

①%
②_
③[charlist]通配符  
eg:"[bsp]%"==>以b、s或者p开头
        "%[a-c]"==>以a、b或c开头
④[!charlist]通配符

IN运算符

==>用于在WHERE子句中指定多个值,可以看作是多个OR条件的简写

IN语法:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

eg:(选择位于“Germany”,“France”和“UK”的所有客户)

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

BETWEEN运算符==>选择给定范围内的值(数字、文本或者日期)

BETWEEN语法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

eg:(选择价格在10和20之间的所有产品)

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

带有 IN 的 BETWEEN 操作符实例
eg:(选择价格在10到20之间,并且CategoryID不是1、2或3的所有产品)

SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

带有文本值的 BETWEEN 操作符实例

eg:(选择所有带有ProductName BETWEEN'Carnarvon Tigers'和'Mozzarella di Giovanni'的产品)
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

带有日期值的 BETWEEN 操作符实例

eg(选取 OrderDate 介于 '04-July-1996' 和 '09-July-1996' 之间的所有订单):
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;

注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在一些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在一些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在一些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。

因此,请检查您的数据库是如何处理 BETWEEN 操作符!
(经测试,MySQL中的BETWEEN包括两个测试值的字段)

SQL数据类型

SQL JOIN

==>基于表之间的共同字段,把两个或多个表的行结合起来

几种不同的JOIN类型:
-->INNER JOIN:如果表中有至少一个匹配,则返回行
-->LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
-->RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
-->FULL JOIN:只要其中一个表中存在匹配,则返回行

1)INNER JOIN ==>选择两个表中具有匹配值的记录

语法:
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
eg:
SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers 
INNER JOIN Orders 
ON Customers.CustomerID=Orders.CustomerID 
ORDER BY Customers.CustomerName;

2)LEFT JOIN==>必返回table1,若没有符合条件的table2,则返回null

语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
eg:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders 
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
--返回Customers中的所有行,若Orders没有匹配的值则返回null

3)RIGHT JOIN==>用法与LEFT JOIN类似

4)FULL OUTER JOIN==>当左右两表匹配时,返回所有记录。对不匹配项也会列出。

语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Self JOIN==>SQL自连接

语法:
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

eg:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City 
ORDER BY A.City;

SQL UNION运算符==>用于组合两个或更多SELECT语句的结果集。

要求:
①SELECT语句列数相同
②列具有相似的数据类型
③每个SELECT语句中的列以相同的顺序排列

UNION语法:(默认选择不同的值)
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL语法:(允许重复值)
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

UNION与WHERE
eg:(从客户和供应商中选择不同的德国城市)
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

SELECT INTO==>从一个表中复制数据,然后插入到新表中(MySQL不支持)

语法:

SELECT *
INTO newtable [IN externaldb]
FROM table1;

用于 MySQLDROP INDEX 语法:

ALTER TABLE table_name DROP INDEX index_name

DROP TABLE 语句(删除表)

DROP TABLE table_name

DROP DATABASE 语句(删除数据库)

DROP DATABASE database_name

TRUNCATE TABLE语句(删除数据,保留表结构)

TRUNCATE TABLE table_name

CREAT DATABASE语句==》数据库的创建
语法:

CREAT DATABASE dbName;

CREAT TABLE语句==》数据库的表的创建
语法:

CREAT TABLE tbName(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
column_name4 data_type(size)
);

ALTER TABLE 语句==>用于在现有表中添加、删除或修改列。

eg:(examples for mysql!!)

--向table1中添加user_eat列(最大长度为32字符)
ALTER TABLE table1 ADD user_eat VARCHAR (32);
--添加主键
ALTER TABLE table1 ADD PRIMARY KEY (user_ID);

--删除列
ALTER TABLE table1 DROP user_eat

--修改列的数据类型
ALTER TABLE table1 MODIFY COLUMN user_eat VARCHAR (8);

--同时修改列名和数据类型
ALTER TABLE table1 CHANGE COLUMN user_sex user_lovers CHAR(2);

--AUTO_INCREMENT==》自动插入增量字段
ALTER TABLE table1 MODIFY user_ID INT AUTO_INCREMENT;

 

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