SQL学习笔记

1 基本语法

1.1 CREATE

创建数据库

CREATE DATABASE db_name;

创建表

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
....
);

数据类型:
varchar、int、decimal、date等
https://www.runoob.com/sql/sql-datatypes.html
注:
create table if not exists per( … q)

1.2 INSERT INTO

不指定列名

INSERT INTO table_name
VALUES (value1,value2,value3,...);

指定列名

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

1.3 UPDATE

注意要用where,不然会整个替换掉

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

1.4 DELETE

同样注意用where

DELETE FROM table_name
WHERE some_column=some_value;

1.5 SELECT

SELECT column_name,column_name FROM table_name;

1.6 DROP

# 删除数据库、表
DROP TABLE table_name
DROP DATABASE db_name
# 删除索引(不同数据库不同)
DROP INDEX tb_name.ind_name
# 删除约束
ALTER TABLE tb_name DROP CONSTRAINT cons_name

1.7 删除数据TRUNCATE

仅仅需要删除表内的数据,但并不删除表本身

TRUNCATE TABLE table_name

1.8 ALTER

用于在已有表中添加、删除、修改列

# 添加列
ALTER TABLE table_name ADD column_name datatype
# 改变列的数据类型
ALTER TABLE table_name ALTER COLUMN column_name datatype
# 还可以选择某个表某个列增加、删除约束等

2 一些参数

2.1 DISTINCT

DISTINCT :返回唯一不同的值
(UNIQUE 是约束,约束值为唯一标识)

SELECT DISTINCT column_name FROM table_name;

2.2 WHERE

SELECT * FROM table_name 
WHERE column_name ='CN';

注:where 后面可以跟 大小等于运算符/BETWEEN/LIKE/IN
在这里插入图片描述

2.2.1 BETWEEN

WHERE column_name BETWEEN value1 AND value2
可以是数值、文本、日期

2.2.2 IN

WHERE column_name IN (value1,value2,...)

IN和BETWEEN的区别:
IN内的值是离散的、BETWWEN内的值可以是"连续"的

2.2.3 LIKE

WHERE column_name LIKE pattern
通配符: % _ ^ 等

2.3 AND / OR

column_name BETWEEN value1 AND value2;

连接运算式,注意用括号

2.4 ORDER BY

SELECT column_name,column_name FROM table_name 
ORDER BY column_name,column_name ASC|DESC;

ASC 顺序,DESC 逆序,不写默认顺序
多列排序:

order by A,B        这个时候都是默认按升序排列
order by A desc,B   这个时候 A 降序,B 升序排列
order by A ,B desc  这个时候 A 升序,B 降序排列

即 desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。

2.5 TOP / LIMIT / ROWNUM

选取前n条记录:
SQL Server:

SELECT TOP number|percent column_name(s) FROM table_name;

MySQL 语法

SELECT column_name(s) FROM table_name LIMIT number;

常用:后面还可以加order by col_name desc这样的

2.7 别名 as

table_name|col_name AS name

2.8 索引 INDEX

创建索引,用与加速搜索/查询

CREATE [UNIQUE] INDEX index_name ON table_name (column_name)

2.9 UNION

用于连接两个SELECT,并返回DISTINCT交集
若想要保留重复值,则用UNION ALL

3 约束

1、在创建表、列时声明:加在列名后面

CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
#方式:
col_name type(length) constraint,
#声明主键,主键必须unique,且not null,且在一个表中有且仅有一个
PRIMARY KEY (P_Id)
)

2、已有表,增加约束:

ALTER TABLE tb_name ADD UNIQUE/... (P_Id)
ALTER TABLE tb_name ADD CONSTRAINT cons_name UNIQUE/... (P_Id,LastName)

3、已有表,删除约束:

ALTER TABLE tb_name DROP CONSTRAINT cons_name

NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。

3.1 主键 PRIMARY KEY

主键必须unique、not null、在一个表中有且仅有一个

#声明表时
P_Id INT NOT NULL UNIQUE PRIMARY KEY
PRIMARY KEY(P_id)#或者这样
#已有表时
ALTER TABLE tablename ADD PRIMARY KEY (P_Id)

若自动创建主键值,可以用INDENTITY(begin,step)(不同数据库不同)
IDENTITY 的开始值是 1,每条新记录递增 1。

ID int IDENTITY(1,1) PRIMARY KEY

3.2 外键 FOREIGN KEY

用于指向另一个表中的unique key
相当于给具有foreign key的值设置了参考另一个表的值域

#声明表时
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
#已有表时
ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

3.3 约束 CHECK

# 声明表的时候,加在后面
col_name type CHECK (col_name>0)
# 已有表
ALTER table_name col_name ADD CHECK (col_name >0)
# 或者(多列约束同理)
ADD CONSTRAINT cons_name CHECK(col_name1>0 and col_name2<0)

3.4 缺省值 DEFAULT

# 声明表的时候,加在后面
col_name type DEFAULT value
# 特殊地,可以使用函数插入值
col_name type DEFAULT getdate() 
# 已有表(注意区别!)
ALTER TABLE table_name ADD CHECK DEFAULT value for col_name

4 连接

INNER JOIN

相当于取两表交集

SELECT tb1.co1, tb1.col2, tb2.co1, tb2.co2
FROM tb1
INNER JOIN tb2
ON tb1.co1=tb2.co1;

LEFT JOIN

返回左表,若右表无对应行则值为NULL

RIGHT JOIN

返回右表,若左表无对应行则值为NULL

FULL JOIN

取并集,若无对应行则值为NULL

视图

游标

事务

有空继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值