希望你们有用 自编

账单提醒 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
...全文
247 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪子家园 2019-04-18
  • 打赏
  • 举报
回复
句句带分号,你这是mysql语句?
victor_yang 2019-04-18
  • 打赏
  • 举报
回复
很基础,很详细,很好

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧