SQL基础知识小结

SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 数据库

SQL 能够作什么 测试

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可建立新数据库
  • SQL 可在数据库中建立新表
  • SQL 可在数据库中建立存储过程
  • SQL 能够设置表、存储过程和视图的权限

SQL语言包括三个部分:数据定义语言(DDL),数据操做语言(DML)及数据控制语言(DCL).net

  • 数据定义语言Data Definition Language(DDL),用来创建数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等语句。
  • 数据操做语言Data Manipulation Language(DML),用来插入、修改、删除、查询,能够修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句、SELECT(查询)
  • 数据控制语言Data Controlling Language(DCL),用来控制数据库组件的存取许可、存取权限等。例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

数据操做语言DML

SELECT 语句 (用于从表中选取数据)

语法:SELECT  列名  FROM 表名  (SQL 语句对大小写并不敏感)
例子:设计

image

获取 “LastName” 和 “FirstName” 列内容,SELECT LastName,FirstName FROM Persons对象

image

 

SELECT DISTINCT语句(关键词 DISTINCT 用于返回惟一不一样的值)

语法 SELECT DISTINCT 列名 FROM 表名
排序

image
需从 Company“ 列中仅选取惟一不一样的值,SELECT DISTINCT Company FROM Orders
结果:索引

image

 

SQL WHERE 子句(有条件地从表中选取数据)

语法:SELECT 列名 FROM 表名 WHERE 列 运算符 值
可在子句中使用的运算符: = <> > < >= <= BETWEEN LIKE    
例子ip

image

但愿选取 居住在“Beijing” 的人,SELECT * FROM Persons WHERE City='Beijing' ci

image
 

AND & OR 运算符(在WHERE 子句中把两个或多个条件结合起来)get

image

使用AND 来显示全部姓为 “Carter” 而且名为“Thomas” 或者“William”的人:
  SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName ='William') AND LastName='Carter'

image

 

ORDER BY 子句(根据指定列对结果集进行排序。默认升序)

image

以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
image

 

INSERT INTO语句(向表中插入新行)
语法: INSERT INTO 表名VALUES (值1, 值2,....)

image

 

例 1 插入新的行
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

例 2 指定的列中插入数据
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

 

Update 语句(用于修改表中的数据)

语法:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 某值

image
例1:更新某一行中的一个列
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

例2:更新某一行中的若干列
修改地址(address),并添加城市(city)
UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’  WHERE LastName = 'Wilson' 

 

DELETE 语句(用于删除表中的行)

语法:DELETE FROM 表名WHERE 列名= 值

删除某行
DELETE FROM Person WHERE LastName = 'Wilson'
删除全部行
DELETE FROM table_name
DELETE * FROM table_name

 

TOP 子句(规定要返回的记录数)不一样的数据库,语法不一样

SQL Server语法:
SELECT TOP number|percent column_name(s) FROM tabel_name
例1 从表中选取头2条记录    SELECT TOP 2 * FROM Persons
例2 从表中选取50%的记录   SELECT TOP 50 PERCENT * FROM Persons

MySQL语法:
SELECT column_name(s) FROM table_name LIMIT number
例  SELECT * FROM Persons LIMIT 5
Oracle语法:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
例 SELECT * FROM Persons WHERE ROWNUM <=5

 

操做符

LIKE 操做符(在WHERE 子句中搜索列中的指定模式)

语法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例  选取Persons表中居住在以N开始的城市里的人
SELECT * FROM Persons WHERE City LIKE 'N%'

SQL 通配符(通配符必须与LIKE 运算符一块儿使用)

  • % :替代一个或多个字符
  • _  :仅替代一个字符

SELECT * FROM Persons WHERE FirstName LIKE '_eorge'    

  • [charlist]:字符列中的任何单一字符
    “Persons” 表中选取居住在城市以“A” 或“L” 或“N” 开头的人:   
       SELECT * FROM Persons WHERE City LIKE '[ALN]%'
  • [^charlist]     [!charlist]:不在字符列中的任何单一字符   

Persons” 表中选取居住在城市不以“A” 或“L” 或“N” 开头的人:   
   SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%'

IN 操做符(容许在WHERE 子句中规定多个值)

语法:SELECT column_name(s)
            FROM table_name
            WHERE column_name IN (value1,value2,...)

例子:选取姓氏为Adams 和Carter 的人
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

 

BETWEEN 操做符(在WHERE 子句中使用,做用是选取介于两个值之间的数据)

语法:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

  • 例:以字母顺序显示介于"Adams"(包括)和"Carter"之间的人
    SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
  • 例:范围以外的人,可以使用NOT 操做符
    SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

注意:不一样的数据库对BETWEEN...AND 操做符的处理方式是有差别,主要体如今边界。

 

Join 和Key(根据两个或多个表中列之间的关系,从这些表中查询数)

imageimage


谁订购了产品,而且他们订购了什么产品?
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

 

INNER JOIN (或者JOIN):内链接。
在表中至少存在一个匹配时,INNER JOIN 关键字返回行
例 前面两张表格中中,列出全部人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

注意:INNER JOIN 关键字在表中至少存在一个匹配时返回行。若是"Persons" 中的行在"Orders" 中没有匹配,就不会列出这些

 

INNER JOIN (或者JOIN):内链接。


在表中至少存在一个匹配时,INNER JOIN 关键字返回行
例 前面两张表格中中,列出全部人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

注意:INNER JOIN 关键字在表中至少存在一个匹配时返回行。若是"Persons" 中的行在"Orders" 中没有匹配,就不会列出这些

 

LEFT JOIN(left outer join):左外链接 。

从左表返回全部的行,即便右表中没有匹配的行。
例 前面两张表格中中,列出全部人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:左表的记录将会所有表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

image

 

RIGHT JOIN (RIGHT OUTER JOIN):右外链接。

会从右表(table_name2) 那里返回全部的行,即便在左表(table_name1) 中没有匹配的行 。
例 前面两张表格中中,列出全部人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:右表的记录将会所有表示出来,而左表只会显示符合搜索条件的记录。左表记录不足的地方均为NULL。

image

 

FULL JOIN(FULL OUTER JOIN) 。

只要其中某个表存在匹配,FULL JOIN 关键字就会返回。
例 前面两张表格中中,列出全部人的定购
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:FULL JOIN 关键字会从左表(Persons) 和右表(Orders) 那里返回全部的行。若是"Persons" 表中的行在表"Orders" 中没有匹配,或者"Orders" 表中的行在表"Persons" 中没有匹配,这些行一样会列出。

image

 

“Orders” 表已存在的状况下为“Id_P” 列建立FOREIGN KEY 约束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)


撤销 FOREIGN KEY 约束
以MySQL 为例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders


 

操做符

 

UNION 操做符(用于合并两个或多个SELECT 语句的结果

注:UNION 内部的SELECT 语句必须拥有相同数量的列。列也必须拥有类似的数据类型。同时,每条SELECT 语句中列的顺序必须相同。
UNION 语法:SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2

UNION 操做符默认选取不一样的值。若是容许重复值,请使用UNION ALL

CREATE DATABASE(建立数据库)


语法:CREATE DATABASE database_name


CREATE TABLE (建立数据库中的表)


语法:CRATE TABLE 表名
(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
....
)

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)


约束用于限制加入表的 数据的类型,


能够在建立表时规定约束(经过 CREATE TABLE 语句),或者在表建立以后也能够(经过 ALTER TABLE 语句)。
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT


NOT NULL(约束强制列不接受 NULL 值。即若是不向字段添加值,就没法插入新记录或者更新记录)


CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

UNIQUE (约束惟一标识数据库表中的每条记录)


CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

PRIMARY KEY 约束惟一标识数据库表中的每条记录


主键必须包含惟一的值
主键列不能包含NULL 值
每一个表都应该有一个主键,而且每一个表只能有一个主键
以MySql为例
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)


为多个列定义PRIMARY KEY 约束(联合主键)


  CREATE TABLE Persons
  (
  Id_P int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255),
  CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)
  )

若是在表已存在的状况下为“Id_P” 列建立PRIMARY KEY 约束
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
注:若是使用ALTER TABLE 语句添加主键,必须把主键列声明为不包含NULL 值(在表首次建立时

撤销 PRIMARY KEY 约束
MySql语法 ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access语法:
        ALTER TABLE Persons DROP CONSTRAINT pk_PersonID


FOREIGN KEY 外键约束


一个表中的FOREIGN KEY 指向另外一个表中的PRIMARY KEY,FOREIGN KEY 约束能防止非法数据插入外键列,由于它必须是它指向的那个表中的值之一

以MySql为例:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

“Orders” 表已存在的状况下为“Id_P” 列建立FOREIGN KEY 约束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)


撤销 FOREIGN KEY 约束
以MySQL 为例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders


CHECK 约束 (限制列中值的范)


下面的 SQL 在"Persons" 表建立时为"Id_P" 列建立CHECK 约束。CHECK 约束规定"Id_P" 列必须只包含大于0 的整数。
以MySql为例
CREATE TABLE Persons
    (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)

表已存在的状况下为"Id_P" 列建立CHECK 约束
ALTER TABLE Persons
ADD CHECK (Id_P>0)

撤销 CHECK 约束
ALTER TABLE Persons
DROP CONSTRAINT chk_Person


DEFAULT 约束(用于向列中插入默认值)


CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
在表已存在的状况下为“City” 列建立DEFAULT 约束
以MySql为例
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
撤销 DEFAULT 约束
以MySql为例
ALTER TABLE Persons ALTER City DROP DEFAULT


CREATE INDEX(用于在表中建立索)


在表上建立一个简单的索引。容许使用重复的
CREATE INDEX index_name ON table_name (column_name)

在表上建立一个惟一的索引。惟一的索引意味着两个行不能拥有相同的索引值
CREATE UNIQUE INDEX index_name ON table_name (column_name)

例降序索引某个列中的值
CREATE INDEX PersonIndex ON Person (LastName DESC)

例索引不止一个列
CREATE INDEX PersonIndex ON Person (LastName, FirstName)


DROP(撤销索引、表以及数据库)


以MySQL为例,撤销索引语法
ALTER TABLE table_name DROP INDEX index_name

DROP TABLE用于删除表(表的结构、属性以及索引也会被删除)
DROP TABLE 表名

DROP DATABASE用于删除数据
DROP DATABASE 数据库名

TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名


ALTER TABLE(在已有的表中添加、修改或删除列DROP)
需在表中添加列,可以使用下列语法
ALTER TABLE table_name ADD column_name datatype

删除表中的列,可以使用下列语法
ALTER TABLE table_name DROP COLUMN column_name


NULL 值

表中某个列是可选的,那么咱们能够在不向该列添加值的状况下插入新记录或更新已有记录。这意味着该字段将以NULL 值保存没法比较NULL 和0;它们是不等价的没法使用比较运算符来测试 NULL 值,好比=, <, 或者<>。必须使用 IS NULL 和IS NOT NULL 操做符例SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL

相关文章
相关标签/搜索