1.SQL 指的是?
Structured Query Language
2.用于从数据库中提取数据?
SELECT
3.用于更新数据库中的数据?
UPDATE UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
4.用于删除数据库中的数据?
DELETE 可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name 或者 DELETE * FROM table_name
5.用于在数据库中插入新的数据?
INSERT INTO
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
6.从 "Persons" 表中选取 "FirstName" 列?
SELECT FirstName FROM Persons
7.从 "Persons" 表中选取所有的列?
SELECT * FROM Persons 提示:星号(*)是选取所有列的快捷方式。
8.从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
SELECT * FROM Persons WHERE FirstName='Peter'
9.从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
SELECT * FROM Persons WHERE FirstName LIKE 'a%'LIKE 用于在 WHERE 子句中搜索列中的指定模式。NOT LIKE 不包含
SQL 通配符必须与 LIKE 运算符一起使用。在 SQL 中,可使用以下通配符:
通配符 | 描述 |
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] | 不在字符列中的任何单一字符 选取居住的城市以 "A" 或 "L" 或 "N" 开头的人: SELECT * FROM Persons WHERE City LIKE '[ALN]%' |
10.请判断下列说法是否正确:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
正确
11.在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
12.按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter' BETWEEN ... AND 选取两个值之间的数据范围。这些值可以是数值、文本或者日期。NOT BETWEEN ... AND
13.返回唯一不同的值?
SELECT DISTINCT
14.用于对结果集进行排序?
ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
15.根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
SELECT * FROM Persons ORDER BY FirstName DESC 升序位ASC 默认降序
16.向 "Persons" 表插入新的记录?
INSERT INTO Persons VALUES ('Jimmy', 'Jackson')SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
17.向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
INSERT INTO Persons (LastName) VALUES ('Wilson')
18.把 "Persons" 表中 "LastName" 列的 "Gates" 改为 "Wilson" ?
UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
更新某一行中的若干列 UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'WHERE LastName = 'Wilson'
19.在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
DELETE FROM Persons WHERE FirstName = 'Fred'
20.返回 "Persons" 表中记录的数目?
SELECT COUNT(*) FROM Persons
SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
1.TOP 子句用于规定要返回的记录的数目。
SELECT TOP number|percent column_name(s)
FROM table_name
SELECT column_name(s)
FROM table_name
LIMIT number
2.IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
3.可以为列名称和表名称指定别名(Alias)。
SELECT column_name(s) 表
FROM table_name
AS alias_name
SELECT column_name AS alias_name 列
FROM table_name
假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。现在,我们希望列出 "John Adams" 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons
AS p
, Product_Orders
AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用别名的 SELECT 语句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
从上面两条 SELECT 语句您可以看到,别名使查询程序更易阅读和书写。
4.join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
我们可以通过引用两个表的方式,从两个表中获取数据:谁订购了产品,并且他们订购了什么产品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
除了上面的方法,我们也可以使用关键词 JOIN 来从两个表中获取数据。
如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
5.内连接与外连接。INNER JOIN(内连接)
JOIN: 如果左右表中有至少一个匹配,则返回行(INNER JOIN 与 JOIN 是相同的)
LEFT JOIN: 即使右表(table_name2)中没有匹配,也从左表(table_name1)返回所有的行
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN: 只要其中一个表中存在匹配,就返回行
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
6.UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值,去重。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
7.ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name
ADD column_name datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name
DROP COLUMN column_name
注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。
要改变表中列的数据类型,请使用下列语法:mysql
ALTER TABLE table_name
ALTER COLUMN column_name datatype
8.CREATE TABLE 语句用于创建数据库中的表。
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:
数据类型 描述
integer(size)
int(size)
smallint(size)
tinyint(size)
仅容纳整数。在括号内规定数字的最大位数。
decimal(size,d)
numeric(size,d)
容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。
char(size)
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。
varchar(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。
date(yyyymmdd) 容纳日期。
9.索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
10.通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
ALTER TABLE table_name DROP INDEX index_name mysql
DROP TABLE 表名称 sql
DROP DATABASE 数据库名称 sql
TRUNCATE TABLE 语句:如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称
11.部分聚合函数。
希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
我们希望查找 "OrderPrice" 列的最后一个值。
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders
合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
我们也可以对一个以上的列应用 GROUP BY 语句,就像这样:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数如sum等一起使用。
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
希望查找订单总金额少于 2000 的客户。
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
注释:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下
-执行where子句查找符合条件的数据;
--使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。
--having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle.
--having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
--having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。
where查询得条件是 行,having查询得条件是组
https://blog.youkuaiyun.com/sinat_21026543/article/details/79825601 参考此博客