Skip to content

Latest commit

 

History

History
272 lines (189 loc) · 6.04 KB

基本命令.md

File metadata and controls

272 lines (189 loc) · 6.04 KB

库操作

显示所有数据库列表

show databases;

建库

create database Mytest;

删库

drop database 库名;

选择库

use 库名;

打开某个数据库(比如数据库:Mytest)

use Mytest;

显示本库中的所有表

show tables;

表操作

建表

# 其实就是声明列的过程
create table 表名(
  # 列1声明 列1参数
) engine myisam charset utf8;

# demo
create table demo(
  id int unsigned auto_increment primary key,
  username char(20) not null default '',
  gender tinyint(1) not null default 0,
  weight decimal(6,2) not null default 0.00,
  birth date not null default '0000-01-01',
  salary decimal(8,2) not null default 0.00,
  lastLogin int unsigned not null default 0
)engine myisam charset utf8;

显示某表的结构

describe table1;

删表

drop table 表名;

修改表名

rename table oldname to newname;

清空表中数据

truncate 表名;

列操作

增加列

# 加在列最后
alter table 表名 add 列名 char(20) not null default '';

# 加在列中指定列后
alter table 表名 add 列名 tinyint(1) not null default 0 after 列名;

# 加在列的第一列
alter table 表名 add 列名 char(20) not null default '' first;

删除列

alter table 表名 drop 列名;

编辑列

# 修改列类型
alter table 表名 modify 列名 char(4) not null default '';

# 修改列名及其类型
alter table 表名 change 旧列名 新列名 char(4) not null default '';

行操作

增加行

# 增加单行
INSERT INTO 表名 (name, age) VALUES ('kerwin', 22);
# 插入多行
INSERT INTO 表名 (name, age) VALUES ('kerwin', 22), ('jim', 33);

更新行

# 根据id更新
UPDATE 表名 SET name='kerwin',age=100 WHERE id = 1;

# 按照条件更新
UPDATE 表名 SET name='Tim' WHERE age > 10;

删除行

DELETE FROM 表名 WHERE id = 2;

查找行(where)

#取出年龄大于5的人的姓名和年纪
SELECT name,age FROM 表名 WHERE age>5;

# 取出salary为8000,5000的用户(in集合)
SELECT * FROM tb_member WHERE IN (8000, 5000);

# 取出salary为5000到8000的人,包括边界值
SELECT * FROM tb_member WHERE BETWEEN 5000 AND 8000;

# 模糊查询,查出用户名以'ke'开头的用户信息
SELECT * FROM tb_member WHERE userName LIKE 'ke%';

# 模糊查询,查出用户名以'ke'开头的后面只有一个字的用户('_'下划线表示一个字符,多个可以用多个下划线拼)
SELECT * FROM tb_member WHERE userName LIKE 'ke_';

# 查询实发工资大于基本工资2000(并新增bonus列)的薪资
SELECT salary, (salary - basic_salary) as bonus FROM tb_member WHERE (salary - basic_salary) > 2000;

# 查出id不为NULL的数据(NULL只能用is来比较,无法用等号判定)
SELECT * FROM member WHERE id IS NOT NULL;

查找行(函数调用)

# MAX, MIN, SUM, COUNT, AVG)(最大,最小,求和,统计次数,平均数

# 查找工资最多是多少
SELECT MAX(salary) FROM tb_member;

# 查看商品第三个栏目下的库存量
SELECT SUM(goods_number) FROM tb_goods WHERE cat_id=3;

分组查询(group by)

# 查看商品每个栏目的库存量(group by分组查询)
SELECT SUM(goods_number) FROM tb_goods GROUP BY cat_id;

# 获取每个栏目下积压的货款
SELECT goods_number*shop_price FROM tb_goods GROUP BY cat_id;

# 查询出各个栏目的积压款金额且额度大于20000的
SELECT SUM(goods_number*shop_price) as money FROM tb_goods GROUP BY cad_id HAVING money > 20000;

# 查询出学生中有2门及2门以上不及格课目的平均成绩
SELECT name, AVG(score), sum(score < 60) as unpass_grades FROM result GROUP BY name HAVING unpass_grades > 2;

排序(order by)

# 排序语句是对结果集的处理(应写在where/group by/having后面)

# demo
SELECT * FROM 表名 ORDER BY 列名 DESC/ASC(降序,升序);

# 按照商品栏目升序排列,在栏目内按照价格降序排列
SELECT * FROM goods ORDER BY cat_id ASC, shop_price DESC;(多个排序组合,逗号隔开)

限制条目(limit)

# demo
SELECT * FROM 表名 LIMIT 偏移量,个数(偏移量如果不写则从0开始计算)

# 取出商品中价格排3-5的商品
SELECT * FROM goods ORDER BY DESC LIMIT 2,3;

子查询

where型子查询:把内层的查询结果作为条件,再次查询
# 查询最新的商品信息
SELECT * FROM goods WHERE goods_id = (SELECT MAX(goods_id) FROM goods);

from子查询:把内层的查询结果作为一个临时表,再次查询
SELECT * FROM (SELECT * FROM goods ORDER BY goods_id DESC) as tb_tmp GROUP BY cat_id;

exits子查询:根据内层的查询结果判定是否取出数据
# 查询栏目下有商品的栏目信息
SELECT cat_id, cat_name FROM goods WHERE EXITS(SELECT * FROM goods WHERE goods.cat_id = catagray_id);

联表查询

# 左右连接(可以看成一个表)(如果没有匹配上,对应的值为NULL)
A表 LEFT JOIN B表 ON 条件 = B表 RIGHT JOIN A表 ON 条件

SELECT * FROM tb_goods LEFT JOIN tb_category ON tb_goods.cat_id = tb_category.cat_id;

# 内连接(如果没有匹配上,则不查出来)(是左右连接的交集)
A表 INNER JOIN B表 ON 条件

# 取出赛场的主队,客队成绩(将左连接作为结果表再次左连接,重新命名为防止名字重复)
SELECT mid,t1.name,score,cid,t2.name FROM (team LEFT JOIN team_info AS t1 ON team.mid = t1.id) LEFT JOIN team_info AS t2 ON team.cid = t2.id;

组合查询

sql1 UNION sql2 // 如果有重复的,默认去重
sql UNION ALL sql2 // 不去重,显示所有结果集

# 取出栏目4和栏目5的商品,且按升序排列
SELECT * FROM goods WHERE cat_id=4
UNION
SELECT * FROM goods WHERE cat_id=5
ORDER BY shop_price ASC;

创建视图 view

# 表的数据变化会影响到视图的变化
# 如果表和视图的数据是一一对应的(唯一),则视图数据也可以影响表数据
CREATE VIEW 视图名字 AS SELECT * FROM ...