一、临时表
1、查询出来的结果是一个临时表,可以给临时表重命名,方便联合查询或者多层嵌套查询的时候用
2、查询结果如果没有重命令,也可以当做值直接用
有两个表:student 和id 表 如下: 查询出 sid与在 id表中id相同的所有 学生姓名
select name from student where sid in (select id from id); 注意后面 不加 as a,如果加了的话, (select id from id)就变成一个新的表,会报语法错误
虽然 select id from id,在界面上显示的是只含有id一列的表,但是 不给重命名 就是两个id值, 可以跟 in、not in、=等结合使用
如果重命名了,就是一个表,当表来使用
二、联合查询
最重要的是消除笛卡尔积,连接概念
内连接: inner join、join 查询出两个表符合条件的记录
select* from test1 inner join test2 on test1.id=test2.id 等同于 select*from test1 ,test2 where test1.id=test2.id
题目:有两个表 score成绩表、course课程表,查询出所有报名物理课程同学的学号
1、 select student_id,cname from score,course where course_id=cid and cname='wuli';,查询结果:
2、 select student_id,cname from score inner join course on course_id=cid and cname='wuli';,查询结果同上
外链接:left join 查询出两个表符合条件的记录,同时保留左表所有数据行
right join 查询出两个表符合条件的记录,同时保留右表所有数据行
full join 全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
三、分组
select avg(number) avg,student_id from score group by student_id having avg>60
group by 列名 :将该列下相同值分为一组
having:分组后条件过滤
group by 一般和分组函数一起使用,常见的分组函数有
count:统计记录条数
sum:求和
avg:平均值
max:最大值
min:最小值
如果group不跟分组函数一起使用,那么该列取值相同的记录为一组,但是只显示该组的第一条记录。
四、显示所有的数据库、显示所有的表
show databases、show tables
五、创建数据库、创建表
创建数据库: create database oldboy;
创建表: create table score(
id int(10) primary key not null,
name varchar(10) unique
);
六、数据的增删改
插入数据:
插入指令列数据:insert into 表名(列名1,列名2) values(值1,值2)
插入所有列数据:inser into 表名 values()
删除:delete from 表名 where ................
改:update 表名 set name=‘宋晓楠’ where ...........
七:删除库 删表
drop database 库名
drop table 表名
八、模糊查询
like:“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)
为了找出以“b”开头的名字:
mysql> SELECT * FROM pet WHERE name LIKE "b%";
为了找出以“fy”结尾的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%fy";
为了找出包含一个“w”的名字:
mysql> SELECT * FROM pet WHERE name LIKE "%w%";
为了找出包含正好5个字符的名字,使用“_”模式字符:
mysql> SELECT * FROM pet WHERE name LIKE "_____";
九、修改表结构 alter
给表增加列: alter table 表名 add column(‘column’可加可不加) 列名 列属性
加一列:alter table id add name varchar(10);
加多列:alter table id add address varchar(2), add name varchar(2);
删除表的列:alter table 表名 drop column(‘column’可加可不加)列名;
删一列:alter table id drop address;
删多列:alter table id drop address,drop name;
十、运算符
算数运算符:”+” ”-” “*” ”/” ”%”
比较运算符: = 等于
!= 或者 <> 不等于
< 小于
> 大于
<= 小于等于
>=大于等于
between and 闭区间
in () 值存在于列表中
not in () 值不存在于列表中
is null、 is not null 是否为空
LIKE 参考标题八
逻辑运算符: 与 and 或者&&
或 or 或者 ||
非 not 或者!
十一、排序
asc:升序
desc:降序
select student_id,avg(number) avg from score group by student_id order by avg asc;
十二。count()
查询数据库中有多少条记录,只返回数字: select count(*) from table