希望你们有用 自编
账单提醒 2019-04-13 12:15:25 乱码改格式: CHARSET=utf8;
创建数据库:create database 数据库名字
查看数据库:show databases;
创建表:create table 名称(id ind(50),name varchar(50),sex char(1),birthay datetime);
选中数据库命令:use
int--表示整形 char--表示字符 varchar--表示字符串 date--表示日期(年月日)
date--表示时间(年月日时分秒)
删除表--drop
修改表名--alter table (修1)rename (修2);
增加表字段--alter table (表名)add(表字段)int(50);
删除表字段--alter table以 (表名)drop(表字段);
修改表字段--alter tale (表名)change name (修改的)varcahr(50);
插入数据(录入数据)insert into (表名)(数据值)value(数据);
表约束:
主键(primary key):物理上储存的顺序
非空(not null):此字段不允许填写空值
唯一(unique):此字段的字不允许重复
默认值:(default):当不填写此值时会使用默认值,如果填写时填写为准
外键(foreign key):维护两个表之间的关联关系
加了约束和注释的表创建:create table (表名)(id int(50)not null primary key comment{顺序}“注释”;
--查询
select id,name,from student;--全表查询;
用*是全表查询(执行效率低),单字段查询(执行效率高)
条件查询:
--需求一:查询学号为111的学生信息
select*from (表名)where(学号)=‘111’
--需求二:查询一个叫老王的同学
select*from(表名)where(名字)=‘老王’
--需求三:查询出姓王的同学(模糊查询)
select*from(表名)where(名字)like“王%”;
--删除表数据
delete from (表名)where id=(删除项);
--修改表数据
update (表名)set name=‘修改的数据’where id=777;
select id AS‘学号’,name AS ‘姓名’,birthday AS‘出生日期’from(表名)AS s;
默认值
(表名)(字段)default ()
条件查询:
比较运算符:
等于:=
大于:>
大于等于:>=
小于:<
小于等于:<=
不等于:!=或<>
逻辑运算符:
and--并且
or--或者
not--非
模糊查询:
like
%表示任意多个字符
_表示一个任意字符
查询范围:
in表示在一个非连续的范围内
between...and...表示在一个连续的范围内
空判断:
注意:null与"是不同的
判空:is null
非判空:is not null
--需求将学生表里面的学生成绩正序排列
--order by表示排序,默认是正序排,列名的后面加上desc之后是倒序排列
select*from student order by sccore;
--需求将学生表里面的雪上成绩倒序排列
select*from student order by sccore desc;
--聚合函数
1,统计--count
2,平均--avg
3,最大值max
4,最小值min
5, 求和--sum
--统计学生表里面的人数
select count(id)from student;
--统计出及格的学生人数
select count(id)from student WHERE score>=60
--计算出学生表学生的平均分
select avg(socore)from student;
--聚合函数是不计算null的值
--找出年龄最大的学生
select id,name,{min年份}{max数字}(birthday)from student;
--计算表所有学生的总分
select sum(score)from student;
--找出大于平均分的学生
【select*from student where score>avg(score)--写错了】
--原则:where条件里面是不能写聚合函数的
--子查询
select*from student where score>(selest avg (score)from student);
--子查询的一个运动
【select min(score)from student;--写错了】
--揪出成绩最差的学生
select*from student where score=(select min(score)from student);
--查询处查成绩比李四要低的学生名字·学生成绩·学生年龄
alter table student add sage int(50);
select name ‘学生姓名’,score‘学生成绩’,sage‘学生年龄’from student where score<(select score from student where name=‘李四’)
表增加 数据:
update 表 set 字段名=字段名+。。。
分页查询:
公式(n-1)*m,m
select *from stydent limit(值,值);
--四舍五入(精确到小数点后一位)
select id,name,round,(height,0)from (表格名称)where ID=(位置)t
--查询男生中成绩最差的学生信息(注意此处的where sex=‘男’要写在子查询里面)
select*from student where score=(select min(score)from student where sex=‘男’);
--分组查询
--统计出男生多少人,女生多少人?
select sex,count(*)from student group by sex;
--统计出各班的人数
select class,count(sid)from group by class;
--统计出各个小组的平均分
select class,avg(id)from student group by calss;
--找出平均分大于70分的班级
select class,avg(scrore) from student group by class having avg(scrore)>70;
where和having区别补充一,having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
二,where肯定在group by之前。
三,where后的条件表达式里不允许使用聚合函数,而having可以
四,当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。
-- 创建商品分类表
CREATE TABLE category(
cid INT(20) PRIMARY KEY【主键】 COMMENT '分类id',
-- 分类id
cname VARCHAR(20) COMMENT '分类名称'-- 分类名称,) COMMENT = '分类表';
-- 创建商品表
CREATE TABLE product(
pid INT(20) PRIMARY KEY COMMENT '商品id',
-- 商品id
pname VARCHAR(20) COMMENT '商品名称',
-- 商品名称
price INT COMMENT '商品价格',
-- 商品价格
pdesc VARCHAR(40) COMMENT '商品描述',
-- 商品描述
cno INT COMMENT '商品类别' -- 商品类别
);
-- 给商品表(从表)添加一个外键
ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid);
多表删除是有讲究的,不能随便删,不能先删主表
只能先删从表,后删主表,或者两张表一起删(从表删除语句在前,主表删除语句在后)
DROP TABLE product;
DROP TABLE category;
-- 1,查询出商品分类名称和商品名称的数据
-- 解题思路,两张表合二为一,形成一张大表
SELECT * FROM category,product WHERE category.`cid`(字段) = product.`cno`(字段);
SELECT category.`cname` 分类名称,product.`pname` 商品名称 FROM category,
product WHERE category.`cid` = product.`cno`;
-- 内连接查询
SELECT c.`cname` 分类名称,p.`pname` 商品名称 FROM category c,(字段)
product p WHERE c.`cid` = p.`cno`;
-- 2,查询手机数码这个分类下的商品名称
SELECT c.`cname` 分类名称,p.`pname` 商品名称 FROM category c,(字段)
product p WHERE c.`cid` = p.`cno` AND c.`cname` = '手机数码';
-- 3,统计出各个分类下的商品数量
SELECT c.`cname` 商品分类,COUNT(*) 商品数量 FROM category c,(字段)
product p WHERE c.`cid` = p.`cno` GROUP BY c.cname;
.添加外键约束:alter table从表 add constraint
外键(fk_从表_主表)foreign key (从表外检字段)
references(主键字段)
--主外键的作用:不是为了进行多表查询,没有主外键照样可以连接起来多表查询
那么主外键的作用是,主键为了保证数据的唯一性,外键为了数据的完整性(主表数据被从表引用,那么主表里面相关联的数据不能随意更改或删除)
连接查询:
1,等值查询
SELECT * FROM A,B WHERE A.CID = B.CID;
2,内连接查询
SELECT * FROM A INNER JOIN B ON a.cid = B.cid
外连接查询:
左外连接和右外连接
3,左外连接
SELECT * FROM A LEFT JOIN B ON a.cid = B.cid
内连接查询和左外连接查询的区别:
-- 内连接查询出分类名称里面的商品 -- 内连接:没有关联的数据不显示
SELECT * FROM category c INNER JOIN product p ON c.cid = p.cno
-- 左外连接查询出分类名称里面的商品 --左外连接:没有关联的数据也会显示,右表没有值的数据用null表示.
SELECT * FROM category c LEFT JOIN product p ON c.cid = p.cno