mysql针对表格数据的增删改查

CREATE TABLE grand(
	gid int(4),
	gname VARCHAR(10),
	gage int(2)
)
1 增
-- 插入所有字段(列)的数据,顺序必须和字段的顺序相同
insert into grand values(1,"大一",10); 

-- 插入部分字段的数据
insert into grand (gid) values (1);

-- 插入部分字段
insert into grand (gid,gname) values (1,"大二");

-- 一次性插入多条数据
INSERT into grand (gid,gname) VALUE (2,"大2"),(3,"大3"),(4,"大4"),(5,"大5");

-- 
INSERT into grand(gname,other) VALUES ("大2","大二学生");

2 删
-- 删除全部数据
DELETE from grand

-- 删除部分
DELETE from grand where gid=6
-- 删除小于9和大于9.。。。除了9其他都删除
DELETE from grand where gid < 9 or gid > 9

-- TRUNCATE 清空表数据
TRUNCATE TABLE grand

注意:DELETETRUNCATE的区别
1.DELETE一条一条删除(效率比较低),TRUNCATE一次性清空(效率比较高)
2.删除的记录可以保存到日志文件中(万一数据误操作可以恢复),TRUNCATE不能恢复数据(类似格式化)
3.DELETE删除后ID仍然自动增长,TRUNCATE清空后ID从1开始
3 改
-- 修改全部gname字段(修改多个字段)
update grand set gname="年段" , other="其他"

-- 修改学时字段,将原本的学时+10
UPDATE grand set xueshi=xueshi+10


-- 字段拼接,gname字段的内容为“年级”+gid+“班级”拼接关键字 CONCAT(str1,str2,...),可以拼接多个字符串
update grand set gname=CONCAT("年级",gid,"班级",xueshi);--会替换原先的内容

-- 修改gname="测试1"  条件 gid=1
update grand set gname="测试1"  where gid=1

-- 修改 gname="测试其他"   条件   gid!=1   gid<>1
UPDATE grand set gname="测试其他" where gid!=1
UPDATE grand set gname="测试不等于" where gid<>1

-- BETWEEN  AND 修改2-4的名称为between
update grand SET gname="BETWEEN" where gid>=2  and gid<=4
update grand SET gname="BETWEEN_and" where  gid BETWEEN 2 and 4

-- or 或
update grand set gname="or"  where gid<2  or  gid>4
4 查
4.1 查一
-- 查询全部数据   *全部字段  from来自于哪张表
select * from t_student

-- 查询部分字段
select uname,kecheng,chengji from t_student

-- 字段取别名 as..注意:as可以省略
select uname as "姓名",kecheng as "课程",chengji as "成绩" from t_student 
select uname "姓名",kecheng "课程",chengji  "成绩" from t_student 

-- DISTINCT去除重复,后面可以跟随1-N个字段,如果写了多个字段会去除多个自动相同的内容
-- 查询姓名会显示所有姓名字段。重复
select uname from t_student

-- 姓名去除重复(重复的只显示一条数据)
select DISTINCT uname from t_student

-- 有学生补考,只是想知道考了几门课程
select uname,kecheng from t_student
select DISTINCT uname,kecheng from t_student



查询课程表(subject)的所有记录,返回如图所示
要求:
返回字段名称使用别称
返回课程名称 (SujectName) 总课时(SubjectHour)
返回10天上完课程的均课时(ClassHour/10select * from SUBJECT
select SujectName "课程名称",SubjectHour  "总课时" , SubjectHour/10  "均课时/天" from SUBJECT

-- NULL
-- 表中有一条记录uname为空
select * from t_student where uname=null()
select * from t_student where uname is null  ()
select * from t_student where uname is not null   ()

-- IN ,在什么里面
SELECT * from t_student where uid=1 or uid=2
SELECT * from t_student where uid in (1,2,3,4)  -- uid值=1或=2或=3或=4.。。。
SELECT * from t_student where uid not in (1,2,3,4)

-- like 
-- 与“%”一起使用,表示匹配0或任意多个字符
-- 与“_”一起使用,表示匹配单个字符
select * from t_student where uname like "张%"   -- %只要是张开头,不管后面有几个字

-- 查询姓名中有张 
select * from t_student where uname like "%张%"  -- 只要姓名中有张,不管前面后面有几个字

-- 查询姓是张。。名字只有一个字
select * from t_student where uname like "张_"  -- 只要是张开头,后面只有一个字
4.2 查二

book 图书表(bid图书编号,bname书名,jiage价格,type类型)

bidbnamejiagetype
1西游记501
2西东游记601
3南游记801
4北游记201
5java402
7C++552
7mysql662

booktype 类型(tid类型编号,tname类型名称)

tidtname
1小说
2编程
SELECT * from book

SELECT * from booktype

-- 简单
select * from book,booktype where book.typeid=booktype.tid;

-- 内连接 select * from 表名1 inner join 表名2 on 条件
select * from book INNER JOIN booktype on book.typeid=booktype.tid;


-- 外链接(包括左连接、右连接)
-- 左连接,以左表为主表,只要左表有数据就可
select * from book left JOIN booktype on book.typeid=booktype.tid;

-- 右连接,,以右表为主表,只要右表有数据就可以
select * from book RIGHT JOIN booktype on book.typeid=booktype.tid;

********************************************* 排序和子查询 ************************************************ 
排序:
select * from t_student
-- 升序 asc 默认
select * from t_student ORDER BY chengji asc 
select * from t_student ORDER BY uid asc 
select * from t_student ORDER BY uid
-- 降序desc 
select * from t_student ORDER BY uid DESC 
select * from t_student ORDER BY chengji DESC 
-- limit分页MySQL的关键字  LIMIT 2一个数字(返回几条)    LIMIT m,n --(m偏移量,n返回几条)
SELECT * from t_student LIMIT 3  -- 获取前三条记录
SELECT * from t_student LIMIT 0,3  -- 获取前三条记录,偏移量0
SELECT * from t_student LIMIT 2,3 --   354 (偏移2)
SELECT * from t_student LIMIT 4,3  --(偏移4,不够3条则实际几条取几条)

子查询:
-- 子查询 在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
-- 查询课程为《java》且分数不小于80分的学生的学号和姓名
学生表(sid name)
成绩表(cid cname fenshu  sid)
SELECT * from student2;
SELECT * from chengji2;

-- 查询成绩表条件(Java 分数>=80)
select sid from chengji2 where cname="java" and chengji>=80  -- 内表,临时数据表

-- 已知sid查询姓名
select  sid,sname from student2 where sid=1 or sid=3

-- 整合步骤
select a.sid,a.sname from student2 as a ,

(select sid from chengji2 where cname="java" and chengji>=80) as b  

where  a.sid=b.sid

********************************************* 统计函数和分组 ************************************************ 

统计函数:

-- count 查询某字段的数据总条数
select count(*) from t_student  -- *效率最低
select count(uid) 总数 from t_student
-- sum 查询某字段的数据的和
select sum(chengji) from t_student
-- avg 查询某字段的数据的平均值
select avg(chengji) from t_student
-- max 查询某字段的数据的最大值
select max(chengji) from t_student
-- min 查询某字段的数据的最小值
select min(chengji) from t_student

-- GROUP BY kecheng根据课程分组
select * from t_student GROUP BY kecheng

-- select 分组的字段名,统计函数(count sum avg ...)

select kecheng from t_student GROUP BY kecheng 
select kecheng "课程",max(chengji) "最高分" ,min(chengji) "最低分",avg(chengji) "平均分",sum(chengji) "总分" from t_student GROUP BY kecheng 

-- 除了分组以外,平均分大于60的才显示
select kecheng "课程",avg(chengji) "平均分" from t_student  GROUP BY kecheng 

select kecheng "课程",avg(chengji) "平均分" from t_student where avg(chengji)>60 GROUP BY kecheng  -- (错)先分组之后才能计算平均分>60

select kecheng "课程",avg(chengji) "平均分" from t_student  GROUP BY kecheng where avg(chengji)>60  -- (错)格式错误

-- 只要是先分组后有条件的搭配 having 

select kecheng "课程",avg(chengji) "平均分" from t_student  GROUP BY kecheng HAVING avg(chengji)>60  ()

select kecheng "课程",avg(chengji) "平均分" from t_student where gender="男" GROUP BY kecheng HAVING avg(chengji)>60 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值