SQL语法
重要事项
SQL对大小写不敏感
某些数据库系统要求每条在每条sql命令的末端使用分号。
分号是在数据库系统中分隔每条sql语句的标准方法,这样就可以对相同的请求中执行一条以上的语句;
SQL DML和DDL
可以把SQL分为两个部分,数据操作语言(DML)和数据定义语言(DDL);
SQL(结果化查询语言)是用于执行查询的语法。但是SQL语言也包含用于更新,插入,删除记录的语法。
查询和更新指令构成了SQL的DML部分
select、update、delete、insert into
SQL的数据定义语言(DDL)部分我们有能力创建或删除表格。我们也可以定义索引,规定表之间的连接,以及施加表间的约束。
SQL中最重要的DDL语句
create databse:创建数据库
alter databsse:修改数据库
create table:创建新表
alter table:变更数据库表
drop table:删除表
create index:创建索引
drop index:删除索引
基本关键字
select * from 表名
1、关键词 distinct
select distinct 列名 from 表名称
2、关键词 where
3、相关运算符
等于 =、不等于 <>、大于 >、>=、<=、 between、 like
or、 and、 order by:语句默认按照升序对记录进行排序
4、insert into table(列名1,……) values(值1,……)
5、update 表名称 set 列名称=新值 where 列名称 = 某值
6、delete from 表名称 列名称 = 值
SQL高级教程
SQL Top
top子句用于规定要返回的记录的数目
对于拥有数千条大型表来说,top子句是非常有用的。
1、persions表选取50%的记录。
select top 50 percent * from persions
2、persion表中选取头两条记录
select top 2 * from persions
3、mysql语法
select * from Persion limit 5
4、oracle语法
select * from persion limit rownum <= 5
SQL Like
not like \ like
SQL 通配符
% 代表零个或多个字符
_ 仅替代一个字符
[] 字符列中的任何单一字符
[^] 不在字符列中的任何单一字符
[!] 不在字符列中的任何单一字符
SQL in
in操作符允许我们在where子句中规定多个值
SQL Between
between操作符在where子句中使用,作用是选取介于两个值之间的数据范围
SQL Aliases
通过使用sql,可以为列名称和表名称指定别名
SQL Join
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
1、引用两个表
select p.lastName,o.orderNo from psersion p,order o where p.id_p = o.id_p;
2、使用inner join
select p.lastName,o.order from persion inner join order on p.id_p = o.id_p;
SQL union
union操作符用于操作两个或多个select语句的结果集。
注意:union内部的select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时select语句的列顺序必须相同
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
SQL select into
语句用于创建表的备份文件
从一个表中的选取数据,然后把数据插入另外一个表中。
1、语法[把所有的列插入到新表,只希望的列插入新表]
select */列名
into 新表名 [in 数据库名]
from 旧表名
select *
into persion in 'Backup.mdb'
from Persions
select lastName,FirstName
into persion_backup
form persions
where city = '北京'
SQL Ceate DB
用于创建数据库
create dadabase databse_name
SQL Create Table
用于创建数据库中的表
1.语法
create table 表名称
(
列名称1 数据类型,
……
)
2.数据类型
3.实例
CREATE TABLE `smart_project_file_info` (
`id` BIGINT(20) NOT NULL COMMENT '唯一ID',
`project_file_id` BIGINT(20) NOT NULL COMMENT '项目合规文件表ID',
`project_file_info_model_id`BIGINT(20) DEFAULT '1' COMMENT '项目合规文件信息模型id',
`file_group_id` VARCHAR(30) DEFAULT NULL COMMENT '合规文件分组ID',
`data_value` VARCHAR(1000) DEFAULT NULL COMMENT '数据值,日期类要转换',
`creator` BIGINT(20) DEFAULT NULL COMMENT '创建人',
`create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
`updater` BIGINT(20) DEFAULT NULL COMMENT '更新人',
`update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
`remark` VARCHAR(200) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_project_file_id` (`project_file_id`), -- 索引
KEY `idx_project_file_info_model_id` (`project_file_info_model_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='项目合规文件信息表';
SQL 约束(Constraints)
约束用于限制加入表的数据的类型
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
SQL NOT NULL约束
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)
)
SQL UNIQUE约束
UNIQUE约束唯一标识数据库中的每条记录。
UNIQUE和PERMARY KEY约束均为列或列集合提供了唯一性的保证
PRIMARY KEY 拥有自动定义的UNIQUE约束
注意:每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束。
1、mysql
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
2、sql server /Oracle/MS Access
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
3、如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:(mysql/sql server)
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)
)
1、当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
mysql/sql server:
————————————————————————
ALTER TABLE Persons
ADD UNIQUE (Id_P)
alter table persions add constraint uc_persionID unique (id_p,LastName)
————————————————————————
2、如需撤销 UNIQUE 约束,请使用下面的 SQL:
mysql:
ALTER TABLE Persons
DROP INDEX uc_PersonID
————————————————————————
sql server:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
SQL PRIMARY KEY约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束:
1、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)
)
2、SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
3、如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:(mysql/sql server)
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)
)
1、如果在表已存在的情况下为 "Id_P" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
alter table persions
add primary key (id_P)
2、如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
alter table persions
add constraint pk_persionID primary key (id_P,lastName)
3、撤销primary KEY约束
mysql:
alter table persions
drop primary key
————————————————————————
sql server:
alter table persions
drop constraint pk_persionID
SQL FOREIGN KEY约束
个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
mysql
——————————————
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
——————————————
sql server/oracle
——————————————
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
SQL CHECK
check约束用于限制列中的值的范围
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
1、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)
)
————————————————————
2、sql server/oracle
____________________
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)
)
3、如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:
create table persons(
Id_P int not null,
LastName Varchar(255) not null,
firstName varchar(255),
Address varchar(255),
City varchar(255),
constraint chk_persion check(Id_P>0,City='Sandnes')
)
4、如果在表已存在的情况下为“Id_P”,列创建CHECK约束,请使用下面的SQL
alter table persons add check(Id_P > 0)
5、如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:
alter table persons add constraint chk_persion check (Id_p> 0,city='Sandes')
6、撤销check约束
sql server/oracle
-------------------------
alter table persons
drop constraint chk_person
_________________________
mysql
alter table persons
drop check chk_Person
SQL 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'
)
1、如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:
mysql
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
—————————————————————————
sql server/oracle
alter table persons
alter column city set default 'SANDNES'
2、撤销default约束
mysql
——————————————————————
alter table persons
alter city drop default
——————————————————————
sql server/oracle
alter table persons
alter column city drop default
SQL drop table
使用drop语句,可以轻松删除索引,表和数据库
1、删除表格中的索引
Microsoft SQLJet语法:
drop index index_name on table_name
sql server语法
drop index table_name.index_name
db2和Oracle语法
drop index index_name
mysql语法
alter table table_name drop index_name
2、删除表(表的结构,属性,以及索引也会被删除)
drop table 表名称
3、删除数据库
drop database 数据库名称
4、仅删除表中的数据,不删除表的本身
truncate table 表名称
SQL alter table
用于已有表中添加、修改、或删除列
1、添加列
alter table table_name
add colum_name datatype
2、删除表中的列
alter table table_name
drop column_name
(某些数据库系统不允许在在数据库删除列的方式)
3、改变表中列的数据类型,
alter table table_name
alter column_name data_type
SQL increment
自主创建主键字段的值
1、mysql用法
create table persons(
P_id int not null auto_increment,
lastName varchar(20) not null,
……
)
2、sql server
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
3、Oracle用法
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
SQL view
视图是基于SQL语句结果集的可视化的表
试图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表的中的字段,我们可以向视图添加SQL函数,where以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计与结构不会受到视图中的函数,where 、或join语句的影响
1、sql create (创建视图)
create view view_name as
select column_names
from table_name
where condtion
create view [current product list] as
select productID,ProductName
from Products
where DisContinued = no
2、查询视图
select * from [current Product list]
3、更新视图
create or replace view view_name as
select column_name(s)
from table_name
where condition
4、撤销视图
drop view view_name
SQL date函数
当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。
只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。
在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。
1、mysql date函数
2、sql server date函数
3、sql date数据类型
- mysql使用下列数据类型在数据库存储日期或日期/时间值
- date - 格式:YYYY-MM-DD
- datetime - 格式:YYYY-MM-DD HH:MM:SS
- datestamp- 格式:YYYY-MM-DD HH:MM:SS
- year - 格式:YYYY 或 YY
- sql server 使用下列数据类型在数据库中存储日期或日期/时间值
- date - 格式:YYYY-MM-DD
- datetime - 格式:YYYY-MM-DD HH:MM:SS
- smalldatetime - 格式:YYYY-MM-DD HH:MM:SS
- timestamp - 格式:唯一的数字
SQL NULLS
NULL值是遗漏的位置数据
默认的,表的列可以存放null值
is null
is not null
SQL isnull()
1、sql server
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
2、oracle
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
3、mysql
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
SQL 数据类型
https://www.w3school.com.cn/sql/sql_datatypes.asp
SQL 服务器
现代的 SQL 服务器构建在 RDBMS 之上。
1、DBMS - 数据库管理系统(Database Management System)
数据库管理系统是一种可以访问数据库中数据的计算机程序。
DBMS 使我们有能力在数据库中提取、修改或者存贮信息。
不同的 DBMS 提供不同的函数供查询、提交以及修改数据。
RDBMS - 关系数据库管理系统(Relational Database Management System)
2、关系数据库管理系统 (RDBMS) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的。
20 世纪 70 年代初,IBM 公司发明了 RDBMS。
RDBMS 是 SQL 的基础,也是所有现代数据库系统诸如 Oracle、SQL Server、IBM DB2、Sybase、MySQL 以及 Microsoft Access 的基础。