MySQL数据库操作DQL操作
1.DQL操作不会对数据进行改变,而是让数据库发送结果集给客户端;查询返回的结果集是一张虚拟表。
①基础查询
1.查询所有列:select * from 数据表名; 例子: 查询学生所有记录 select * from stu;
2.查询指定列:select 字段1,字段2,字段3 from 数据表名;例子: 查询所有学生学号,姓名,性别 select id,name sex from stu;
②条件查询 where关键字
select 列名 from 数据表名 where 字段1=待定值 例子:查询学号为2的学生记录 select * from stu where id=2;
在where语句中的关键字:
并且 ->and 例子:查询性别为女并且年龄为50的记录 select * from stu where sex=女 and age=50;
或者 ->or 例子:查询学号为S_1001或者姓名为李四的记录 select * from where id=S_1001 or name=李四;
在....中查询->in() ; 例子:查询学号为S_1001,S_1002,S_1003的记录 select * from where id in(S_1001,S_1002,S_1003);
不在.....中查询->not in(); 例子:查询学号不是S_1001,S_1002,S_1003的
查询....为null值-> is null; 例子:
在.....之间查询->between....and; 例子: 查询年龄在20到40之间的学生记录 select * from stu where age between 20 and 40;
查询非-> !=或者<>或者not;例子:查询性别非男的学生记录 ①select * from stu where sex!=男 ② select * from stu where sex=<>男 ③ select * from stu where not sex=男;
查询不为null值-> is not null;例子:查询性别不为null的学生记录 ①select *from stu where sex is not null; ② select * from stu where not sex is null;
③模糊查询
模糊查询关键字like;通配符 _任意一个字符;%任意n个字符
select * from 数据表名 where 字段1 like _或者%
例子:查询姓名由5个字母组成的学生记录
select * from where name like _____;
④字段控制查询
1.去除重复记录 distinct关键字 例子 通常员工所得的工资或许相同但又不想筛选重复的相同工资值这时可以采用distinct关键字将相同工资的去除 select distinct sal from 数据表名 ;
例子:查询所有不重复的名字的学生记录 select distinst name from stu;
2.查询结果XXX之和(与给列名添加别名相结合) 例子:查询月薪和佣金之和 select * ,sal+comm as tatal from 数据表名 where 条件;
例子:
⑤排序查询
1.升序排序 关键字 order by 字段 asc select * from 数据表名 order by 字段 asc;例子:查询学生的所有记录,按年龄升序排序 例子:select * from stu order by age asc;
2.降序排序 关键字 order by 字段 desc select * from 数据表名 order by 字段 desc;例子:查询学生的所有记录,按年龄降序排序 例子:select * from stu order by age desc;
3.聚合函数 MAX,MIN,AVG,COUNT
MAX例子:查询学生的最高分数 select max(grade) from stu;
MIN例子:查询学生的最低分数 select min(grade) from stu;
AVG例子:查询学生的平均成绩 select avg(grade) from stu;
COUNT例子 :查询学生的拥有成绩的人数 select count(grade) as cnt from stu;
⑥分组查询 关键字 group by having 例子 1.查询每个班的班名和人数 学生记录 select classid ,count(*) from stu group by classid;
2.查询每个班的班名及分数在90以上的总人数的学生记录 select classid,count(*) from stu where grade>90 group by classid;
3.查询总分大于300的班级以及班级总分 select classid,sum(grade) from stu group by classid having sum(grade)>300;
havaing和where 区别
having是在分组后的数据进行过滤
where是在分组钱的数据进行过滤
4.限制查询 关键字 limit 例子:查询5行记录,记录从0行开始 select * from stu where litmit 0,5;
5.数据的完整性
主键约束 :primary key 例子:id int primary key;
唯一约束:unique 例子:name varchar(10) unique;
自动增长列:auto_increment 例子: id int primary key auto_increment;
非空约束:not null;例子:message varchar(50) not null;
默认值约束:default 例子: grade double default 0.0;
外键约束:foreign key;例子 ①id int ;foreign key id refrence stu(id);
② alter table s add foreign key(sid) references student(id);
enum约束:例子:sex enum(男,女);
⑦多表查询
合并结果集 :合并结果集就是把两个select语句的查询结果合并到一起
1.union 去除重复记录 例子:将学生表和s表做不重复的连接 select * from stu union select * from s;
2.union all 不去除重复记录 例子:将学生表和s表做重复的连接 select * from stu union all selct * from s;
要求:被合并的两个结果集列数,列类型要一致(两个表之间的列数 列类型要一致);
连接查询
1.内连接
例子:在学生表和成绩表中查询所有记录:select * from stu,grade where stu.subject=grade.subject;(笛卡尔积应用)
例子:指定要查询的列:在学生表和成绩表中查询学生的学号和姓名的记录: select stu.id,stu.name from stu,grade where stu.subject=grade.subject;
例子:为表指定别名,然后在引用列时使用别名即可:在学生表和成绩表中查询学生的学号和姓名的记录 select s.id,s.name from stu as s,grade as g where s.subject=g.subject;
标准内连接 例子: select * from stu as s inner join grade as g on s.subject=g.subject;
2.外连接(左连接,右连接)
左连接:左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL
例子:select * from stu as s left outer join grade as g on s.subject=g.subject;
右连接:右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL
例子:selelect * from stu as s right outer join grade as g on s.subject=g.subject;
3.自然连接 :连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式 NATURAL
例子:内连接 select * from stu as s natural join grade as g;
例子:右连接 select * from stu as s natural right join grade as g;
例子:左连接 select *from stu as s natural left join grade as g;
4.子查询:
一个select语句中包含另一个完整的select语句,子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了
例子:查询工资高于JSONS的员工记录: select * from emp where sal>(select sal from emp where name='JSONS');
例子:查询工资高于30号部门所有人的的员工信息 select * from emp where sal>all(select sal from emp where departno=30);当子查询结果集形式为多行单列时可以使用ALL或ANY关键字
例子:查询工作和工资与MARTIN完全相同的员工信息 select * from emp where (sal,job) in(select sal,job from emp where name='MARTIN');
5.自连接:自己连接自己取别名
2.数据库的导出和恢复
①导出:mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径 例子:mysqldump -root -p123 stu>d:\stu.sql;
②恢复:前提:必须创建数据库名
方法①
连接数据库
例子:mysql>source d:\stu.sql;
方法②
mysql –u用户名 –p密码 数据库<要执行脚本文件路径
例子;mysql -uroot -p123 stu<d:\stu.sql;
注意:数据库DQL操作执行语句from->where->group by->having->select->order by->limit