说实话这篇写的不算什么好玩意儿,没有参考价值,对我有记忆的价值,仅此而已;

表的增删改查

假设一张表称为tableA,其结构如下:

id name major
a001 bear a
a002 child b
a003 steve c

SELECT

查找语句,一般用法:

1
2
3
SELECT * from tableA                 #从tableA里查找所有
SELECT tableA.id,major from tableA #从tableA里查找除了name的
SELECT * from student where name like '%e%' #从tableA里模糊查找带e的内容 %为任意

like为模糊查找;

INSERT

增添语句,一般用法:

1
INSERT INTO tableA VALUES('a004','crazy','d')   #对tableA插入一行内容

UPDATE

改动语句,一般用法:

1
UPDATE tableA set id = 'a007' where id = 'a001' #讲a001的id改为a007,set where不可颠倒

where即条件查询,后面跟条件,不加where,则全体内容的id都设置为a007,如果id是pk则会失败;

set是设置,设置一个字段等于一个新值;

DELETE

删除语句,一般用法:

1
DELETE from tableA where id = 'a001'  #删除id为a001的所有字段

数据查询

单关系

无条件查询

1
SELECT * from tableA

只有from的语句;

条件查询

1
SELECT * from tableA where ...

where后面跟的…即为条件,可以是简单的运算比较符、逻辑运算;

  • 对于逻辑运算除了用&&,||,!来表示,也可用英文的AND,OR,NOT;
  • 使用BETWEEN AND可以约束条件范围,用法为: SELECT * from tableA where id BETWEEN 30 AND 40
  • 使用IN可以查询属于集合的元组,用法为: SELECT * from tableA where id IN ('123','123');
  • 上面两种查找都可以用运算符来代替
  • 使用NULL可以查询对应字段为空的空值查询,用法为: SELECT * from tableA where id IS NULL;
  • 使用LIKE进行模糊查找,用法在上方已给出;

聚合函数查询

使用以下函数来操控选择查询的字段值:

函数名 功能
AVG 字段平均值
SUM 字段总和
MAX 字段中最大值
MIN 同上
COUNT 字段值的个数

使用方法如下: SELECT SUM(score), COUNT(number) from student where ...

上述语句的含义为,查询student表中满足条件的score总和以及number的个数;

使用DISTINCT消除重复元组;

分组查询

1
SELECT major, COUNT(*) from tableA GROUP BY id HAVING ...

一般用于数字统计的查询,针对于某个字段来分组;

having类似于group by的where,设置条件,其含义是只显示满足having条件的组;

查询排序

1
SELECT ... from tableA order by id DESC

对于…的查询按照id的降序排序;

DESC为降序,ASC为升序;

限制查询

1
2
SELECT ... from tableA LIMIT 1,3		#从第一行往下1行开始(2行)往后找三行
SELECT ... from tableA LIMIT 3 OFFSET 1 #和上面等效

多关系

内连方法:

1
2
SELECT ... from tableA,tableB where ...  #等效于下方
SELECT ... from tableA inner join tableB ON ...

对于内连而言,不满足条件即不显示,外联会跟随某张表(主表)显示这张表满足条件的所有跟随项,不满足条件的内容会以NULL显示:

1
SELECT ... from tableA LEFT outer join tableB on ...

外连分左右外连,意思是选择左右哪张表作为主表,上述语句tableA在左,所以其为主表;

关于交叉连接:

1
SELECT * from A cross JOIN B

字段为A,B一起的总字段,元组则是一个关于A,B元组的笛卡尔积;

视图

创建:

1
CREATE VIEW view_name AS ...

…为完整的select语句构成;

其意义为,将此select生成的子表封装,称为视图,可直接当作一个表来操作;

索引

创建:

1
2
3
create unique index a on tableA(id,name);   #建立id和name的复合唯一索引
create index b on tableA(name(4),DESC); #建立普通索引对name前4字符以降序排列
create fulltext index c on tableA(text); #建立对text的全文索引

目的是为了加速数据查找的速度;

对于限定属性的值可以有:

1
2
alter table tableA add(constraint 限定名 check(major regexp '[0-9]'))  #限定major只能填0-9
alter table tableA add(constraint 限定名 check(major = '1' and major = '2')) #限定只能为12

用户

创建:

1
create user if not exists 'Second_BC' BY '123321'   #以123321口令建立此用户

在sql中,权限组叫角色(role)

权限是针对于用户对对象的命令使用权;

1
2
3
4
lock table xxx read; 		#读锁/共享
lock table xxx write; #写锁/最高限定
#解锁
unlock table xxx;

另外还有行级锁:

1
2
select * from tableA where id = xxx LOCK IN SHARE MODE;   #共享
select ... FOR UPDATE; #操作类型指令为写锁

行级锁限定时总会存在where来指定行;

对于ALTER操作

改表名:

1
rename table 表名 to 新表名;

改字段名:

1
alter table 表名 change 字段名 新字段名 类型;

类型可以与之前一样就行;