基础的增删改查
插入
单行插入
语法:insert into 表名 values(数据);
例子:== insert into student values(1,‘张三’);==
多行插入
语法:insert into 表名 values(数据1),(数据2)…;
例子:insert into student values(3,‘王五’),(4,‘赵六’);
指定行插入
语法:insert into 表名 (列1,列2,列3…) values (数据);
例子:insert into student(name) values(‘小美’);
查询
全列查询
select * from 表名;
指定列查询
语法:select 列1,列2,列3… from 表名;
例子:selece id,name from exam;
表达式查询
语法:select 表达式 from 表名;
例子:查询所有学生各科成绩的总分
select id,name,chinese+math from exam;
设置别名
select id,name,chinese+math as total from exam;
注意:设置别名的时候,as是可以省略的,但是不建议省略.因为去掉之后SQL的可读性就会下降
去重查询
语法:select distinct 列名 from 表名;
注意:如果想要使用distinct的时候查询多列数据,那么必须多个列都相同,那么才会进行去重,否则就不会去重.
查询后排序
语法:select 列名/表达式/别名 from exam from 表名 order by 列名 asc/desc;
注意: 1.order by 列名后面的desc代表的是从大到小排序,而asc是从小到大排序.而如果什么都不写的话,默认就是从小到大排序!
2.当数据中出现null的时候,null被视为最小值,比表里的任何数据都小。
也可以使用别名,语法:==
select 表达式 as 别名 from 表名 order by 别名;==
例子:select name,chinese+math+english as total from exam order by total;
条件查询
语法:select 列名/*/表达式/别名 from 表名 where 条件; ==
例子:查询总分在200分以上的学生姓名及成绩select name,chinese+math+english as total from exam where chinese+math+english>200;==
注意: 在where里面,不可以使用别名来代替表达式.但是可以使用别名
and和or就代表者&和|
注意:and和or同时使用的时候,and的优先级比or高,因此在使用and和or的时候,尽量使用()来表明优先级
范围查询
查询数学成绩在[80,90]之间的同学及其数学成绩
select name,math from exam where math between 80 and 90;或者select name,math from exam where math>=80 and math <= 90;
查询语文成绩是87,70,56,55其中一个的人及其语文成绩
select name,chinese from exam where chinese in (87,70,56,55);
模糊查询
查询姓孙的同学,并且名字是两个字
select * from exam where name like ‘孙_’;
在这个SQL语句中,我们使用了like关键词,并且使用了下划线. 其中一个下划线代表一个字符
查询姓孙的同学,无论名字有几个字
select * from exam_result where name like ‘孙%’;
在上述SQL语句,跟上一个例子不同的是,’ '里面是孙%而不是孙,这是因为%代表后面是任意多个字符_
分页查询
语法:select */表达式/列/别名 from 表名 limit n offset m;
查询总成绩在前三名的同学
select name,chinese+math+english as total from exam order by total desc limit 3;
修改
语法:==update 表名 set 列名 = 数据; ==
例子:将总成绩倒数前三名的数学成绩加30分
update exam set math = math+30 order by chinese+math+english limit 3;
删除
语法:detele from 表名 where…/order by …/limit n;
联表查询
create table student(studentId int,name varchar(50),classId int);
insert into student values(1,‘张三’,1);
insert into student values(2,‘李四’,1);
insert into student values(3,‘王五’,2);
insert into student values(4,‘赵六’,2);
== create table class(classId int,name varchar(20));
insert into class values(1,‘java1班’);
insert into class values(1,‘java2班’);==
* 在SQL中进行笛卡尔积,最简单的做法就是直接select from后面跟上多个表名,表名之间用逗号分割。*
inner join
select s.studentno,studentname,subjectno,studentresult from student as s inner join result as r
wheres.studentno = r.studentno;
left join
select s.studentno,studentname,subjectno,studentresult from student as s left join result as r
on s.studentno = r.studentno;
right join
select s.studentno,studentname,subjectno,studentresult
from student as s right join result as r
on s.studentno = r.studentno;
总结
inner join 返回两个表中都有的数据
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从左表中返回所有的值,即使左表中没有匹配