SQL数据库--一些基本的操作

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

猜你喜欢

转载自blog.csdn.net/sinat_21026543/article/details/79825601