0
点赞
收藏
分享

微信扫一扫

SQL基础教程

驚鴻飛雪 2023-04-24 阅读 95


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 的基础。

SQL 函数

MS Access合计函数


SQL Server合计函数


Scalar函数


举报

相关推荐

0 条评论