说实话这篇写的不算什么好玩意儿,没有参考价值,对我有记忆的价值,仅此而已;
表的增删改查
假设一张表称为tableA,其结构如下:
id | name | major |
---|---|---|
a001 | bear | a |
a002 | child | b |
a003 | steve | c |
SELECT
查找语句,一般用法:
1 | SELECT * from tableA #从tableA里查找所有 |
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 | SELECT ... from tableA LIMIT 1,3 #从第一行往下1行开始(2行)往后找三行 |
多关系
内连方法:
1 | SELECT ... from tableA,tableB where ... #等效于下方 |
对于内连而言,不满足条件即不显示,外联会跟随某张表(主表)显示这张表满足条件的所有跟随项,不满足条件的内容会以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 | create unique index a on tableA(id,name); #建立id和name的复合唯一索引 |
目的是为了加速数据查找的速度;
对于限定属性的值可以有:
1 | alter table tableA add(constraint 限定名 check(major regexp '[0-9]')) #限定major只能填0-9 |
用户
创建:
1 | create user if not exists 'Second_BC' BY '123321' #以123321口令建立此用户 |
在sql中,权限组叫角色(role)
权限是针对于用户对对象的命令使用权;
锁
1 | lock table xxx read; #读锁/共享 |
另外还有行级锁:
1 | select * from tableA where id = xxx LOCK IN SHARE MODE; #共享 |
行级锁限定时总会存在where来指定行;
对于ALTER操作
改表名:
1 | rename table 表名 to 新表名; |
改字段名:
1 | alter table 表名 change 字段名 新字段名 类型; |
类型可以与之前一样就行;