SQL基础学习
SQL是用于访问和处理数据库的标准的计算机语言
RDBMS指的是关系型数据库管理系统。
SQL对大小写不敏感。
SQL分为两部分:数据操作语言(DML)和数据定义语言(DDL)
DML:SELECT,UPDATE,DELETE,INSERT INTO
DDL:CREATE DATABASE(创建新数据库),ALTER DATABASE(修改数据库),CREATE TABLE(创建新表),ALTER TABLE(变更数据库表),DROP TABLE(删除表),CREATE INDEX(创建索引),DROP INDEX(删除索引)
SELECT语句
SELECT 列名称 FROM 表名称
SELECT LastName,FirstName FROM Persons
SELECT * FROM Persons
SELECT DISTINCT语句
SELECT DISTINCT 列名称 FROM 表名称
WHERE字句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
<> 不等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
例:
SELECT * FROM Persons WHERE City='Beijing'
AND 和 OR 运算符
AND:第一个条件和第二个条件都成立,则AND运算符显示一条记录
OR:只要有一个条件成立
SQL ORDER BY子句
ORDER BY语句默认按照升序对记录进行排序
降序排序,则使用DESC关键字
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO语句
INSERT INTO 表名称 VALUES (值1,值2,.....)
INSERT INTO table_name (列1,列2,...) VALUES (值1,值2,...)
SQL UPDATE 语句
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE Person SET FirstName='Fred' 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 table_name
MySQL 语法
SELECT column_name(s) FROM table_name LIMIT number
例:
SELECT column_names(s) FROM table_name WHERE ROWNUM <= number
例:
SELECT * FROM Persons WHERE ROWNUM <= 5
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
LIKE 操作符
LIKE 操作符用于在WHERE子句中搜索列中的指定模式
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例: SELECT * FROM Persons WHERE City LIKE 'N%'
SQL 通配符
% 代替一个活多个字符
- 仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或者[!charlist]不在字符列中的任何单一字符
IN操作符
IN操作符允许我们在WHERE 子句中规定多个值
BETWEEN操作符
操作符BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以使数值、文本或者日期
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
Alias(别名)
表的SQL Alias语法
SELECT column_name(s) FROM table_name AS alias_name
SELECT column_name AS alias_name FROM table_name
例:
SELECT po.OrderID, p.LastName,p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John'
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons,Product_Orders WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
在表中每个Primary Key都是唯一的
SELECT Persons.LastName, Persons.FirstName,Orders.OrderNo FROM Persons
INNER JOIN Orders
JOIN:表示表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表中返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,就返回行
INNSER JOIN 关键字
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2
ON table_name1.column_name = table_name2.column_name
LEFT JOIN 关键字
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2
ON table_name1.column_name=table_name2.coumn_name
例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM
Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2
on table_name1.column_name=table_name2.column_name
例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT
JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN关键字就会返回行
SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
UNION 操作符
UNION操作符用于合并两个或多个SELECT语句的结果集
UNION内部的SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION操作符选取不同的值,如果允许重复的值,请使用UNION ALL
SQL UNION ALL语法
SELECT column_name(s) FROM talbe_name1
UNION ALL
SELECT column_name(s) FROM table_name2
SELECT INTO语句
SELECT INTO语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用语创建表的备份复件或者用语对记录进行存档。
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
只把希望的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase]
FROM old_tablename
CREATE DATABASE语句
CREATE DATABASE 用于创建数据库
CREATE DATABASE database_name
CREATE DATABASE my_db
CREATE TABLE 语句
CREATE TABLE 语句用语创建数据库中的表
CREATE TEABLE 表名称
(
列名称 1 数据类型,
列名称 2 数据类型,
列名称 3 数据类型,
......
)
数据类型
interger(size),int(size),smallint(size),tinyint(size):仅容纳整数。在括号内规定数字的最大位数
decimal(size,d),numeric(size,d):容纳带有小数的数字。“size”规定数字的最大位数,“d"规定小数点右侧的最大位数。
char(size):容纳规定长的字符串
varchar(size):容纳可变长度的字符串。
data(yyyymmdd)容纳日期
SQL NOT NULL 约束
NOT NULL约束强制不接受NULL值
CREATE TABLE Persons
{
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchasr(255),
City varchar(255)
}
UNIQUE约束
UNIQUE约束唯一标识数据库表中的每条记录。
UNIQUE和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的UNIQUE约束
注意:每个表可以由多个UNIQUE约束,但是每个表中只能有一个PRIMARY KEY约束
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName Varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语法:
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 UNIQUE (Id_P,LastName)
)
当表已经被创建时,如需在“Id_P”列创建UNIQUE约束,请使用下来SQL:
ALTER TABLE Persons ADD UNIQUE(Id_P)
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
取消:
ALTER TABLE Persons DROP CONSTAINT uc_PersonID
PRIMARY KEY约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值
主键列不能包含NULL值
每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名PRIMARY KEY 约束,以及为多个列定义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 pk_PersonID PRIMARY KEY (Id_P,LastName)
)
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons Add CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
FOREIGN KEY 约束
一个表中的FOREIGN KEY 指向另一个表中的PRIMARY KEY
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
CREATE TABLE Orders
(
Id_O int not null,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY(Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY(Id_P)
REFERENCES Persons(Id_P)
ALTER TABLE Orders DROP FOREIGHN KEY fk_PerOrders
CHECK约束
如果对单个列定义CHECK约束,那么该列只允许特定的值。
如果对一个表定义CHECK约束,那么次约束会在特定的列中对值进行限制。
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名CHECK 约束,以及为多个列定义CHECK 约束。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City="Sandnes")
)
ALTER TABLE Persons ADD CHECK (Id_P >0)
ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P >0 AND City='Sandnes')
DEFAULT约束
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'
)
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDENS'
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT
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)
CREATE INDEX PersonIndex ON Person (LastName DESC)
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
DROP语句
DROP INDEX 语句
DROP INDEX index_name ON table_name
DROP TABLE 语句
DROP TABLE 表名称
DROP DATABASE 语句
DROP DATABASE 数据库名称
仅仅需要除去表内的数据,单并不删除表本身。
TRUNCATE TABLE 表名称
ALTER TABLE 语句
添加列
ALTER TABLE table_name ADD column_name datatype
删除列
ALTER TABLE table_name DROP COLUMN column_name
[DROP COLUMN column_name]
改变表类中的数据类型
ALTER TABLE table_name ALTER COLUMN column_name datatype
AUTO INCREMENT 字段
在每次插入新记录时,自动地创建主键字段的值。
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
Oracle 的语法
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
CREATE VIEW 语句
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL函数,WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
删除视图
DROP VIEW view_name
GROUP BY 语句
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING 子句
WHERE 关键字无法和合计函数一起使用
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_na,e
HAVING aggregate_function(column_name) operator value

浙公网安备 33010602011771号