SQL (的数据定义语言)部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加
表间的约束。
SQL 中最重要的 DDL 语句:
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
SQL 通配符:
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
数据类型 | 描述 |
---|---|
|
仅容纳整数。在括号内规定数字的最大位数。 |
|
容纳带有小数的数字。 "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) |
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) |
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
SELECT DISTINCT Company FROM Orders
SELECT * FROM Persons WHERE (FirstName=‘Thomas‘ OR FirstName=‘William‘) AND LastName=‘Carter‘
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
SELECT * FROM Persons WHERE City LIKE ‘%lon%‘
SELECT * FROM Persons WHERE City NOT LIKE ‘%lon%‘
SELECT * FROM Persons WHERE LastName IN (‘Adams‘,‘Carter‘)
SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams‘ AND ‘Carter‘
SELECT * FROM Persons WHERE LastName NOT BETWEEN ‘Adams‘ AND ‘Carter‘
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName=‘Adams‘ AND Persons.FirstName=‘John‘
SELECT LastName AS Family, FirstName AS Name FROM Persons
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
SELECT E_Name FROM Employees_China UNION ALL SELECT E_Name FROM Employees_USA
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City=‘Beijing‘下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
也可以对一个以上的列应用 GROUP BY 语句,就像这样:SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
SELECT 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 Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接、自然连接和不等连接三种。
select * from T_student s,T_class c where s.classId = c.classId 等于 select * from T_student s inner join T_class c on s.classId = c.classId
概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)
select * from T_student s inner join T_class c on s.classId <> c.classId
概念:连接条件和等值连接相同,但是会删除连接表中的重复列。
查询语句同等值连接基本相同:
select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId总结:内连接是只显示满足条件的!
外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。
概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
select * from T_student s left join T_class c on s.classId = c.classId总结:左连接显示左表全部行,和右表与左表相同行。
概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
select * from T_student s right join T_class c on s.classId = c.classId总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。
概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值
select * from T_student s full join T_class c on s.classId = c.classId总结:返回左表和右表中的所有行。
select *from T_student cross join T_class ‘等于 select *from T_student, T_class总结:相当与笛卡尔积,左表和右表组合。
select * from T_student s cross join T_class c where s.classId = c.classId
(注:cross join后加条件只能用where,不能用on)
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders WHERE Customer=‘Carter‘COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_nameCOUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
SELECT UCASE(LastName) as LastName,FirstName FROM Persons
SELECT LCASE(LastName) as LastName,FirstName FROM Persons
SELECT MID(City,1,3) as SmallCity FROM Persons
SELECT LEN(City) as LengthOfCity FROM Persons
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
SELECT ProductName, UnitPrice, FORMAT(Now(),‘YYYY-MM-DD‘) as PerDate FROM Products
原文:http://blog.csdn.net/coslay/article/details/22397975