基本语句
DML语句:(database maptipu.. Language:数据库操作语言), 它是用来对数据库中的对象进行操作的语言。
delete:删除
update:更新
insert:插入
DDL语句:(database defined Language:数据库定义语言),主要用来创建和修改数据库中的对象。
create:创建
alter:修改
drop:删除
DCL语言:(database control language:数据库控制语言),它是对数据库权限控制的操作。
grant:授权
connect:连接
DQL语句:(databse Query Language:数据库查询语言),它是用来查询数据库中的对象的。
select:查询
常用语句:
修改表名:rename oldname to newname; commit;
修改表添加字段:alter table myemp add(hiredate DATE);
修改表删除字段:alter table myemp drop(hiredate);
修改表修改段:alter table myemp modify(gender char(5));
删除表:drop table myemp;
进入MySQL:
1,CMD 进入命令输入
2,d: 进入D盘
3,cd D:\HPEU\Software\EasyPHP5.2.10\mysql\bin 找到MySQL的路径
4,dir
5,D:\HPEU\Software\EasyPHP5.2.10\mysql\bin> mysql -uroot -p
6,enter
注意:首先要确定easyphp5.2.10 的已经打开
进入内部数据库:
1,mysql> show databases; 显示数据库
2,mysql> use ciircrm 使用数据库中的一个数据库(ciircrm)
Database changed(数据库被改变)
3,mysql> show tables; (显示tables)
4,mysql> select * from cri_change; 选择其中一个表(cri_change)
创建一个自己的数据库:
1,create database class; class为数据库名称
2,show databases; 查看是否创建成功
3,create table student(1,条件,2,条件.....);
创建学生表 ()中填写学生表的首行信息以及输入限制:如(number,int)
4,insert into student(1,2,....)values(),()...(); 添加学生表的内容
5, select * from student; 选择学生表
插入数据:
insert into myemp(id,gender,name,birth,salary,job,dept)
values(6,'W','Flacs',TO_DATE('1997-05-03','YYYY-MM-DD'),4000,'UI开发工程师',123458);
更新数据:update myemp set GENDER='G' where GENDER='M';
删除数据:delete from MYEMP where job='CEO';
查询信息:
1,学生中是男生并且是class1班的学生信息
select * from student where sex='mal' and grade='class1';
2,学生中是男生并且是class1班并且年龄大于16岁的学生信息select * from student where sex='mal' and grade='class1'and age>16;
3,学生中是class1班或者class2班的学生的女生信息
select * from student where( grade='class1' or grade='class2' )and sex='femal' ;
4,学生中所有男生的学生信息
select * from student where sex='mal';
标准的SQL字符串匹配: like “%”匹配任意数目字符。
1,要查找学生表中姓名含有‘li’的人员信息
select * from student where name like ‘%li%’;
2,学生中名字是以’li’开头的学员信息
select * from student where name like 'li%';
3,学生中名字是以’zhang’结尾的学员信息
select * from student where name like '%zhang';
4,学生中名字中包含’li’并且是class3班的学员信息
select * from student where name like '%li%'and grade='class3';
5,学生中名字中不包含’li’并且是class3班的学员信息
select * from student where name not like '%li%'and grade='class3';
常见的Mysql典型聚合函数:
min()、max()、sum()、avg()、count()
1,学生表中最大年龄是多少
select max(age) from student;
2,学生表中最小年龄是多少
select mim(age) from student;
3,学生表中学生年龄之和是多少
select sum(age) from student;
4,学生表中学生的平均年龄是多少
select avg(age) from student;
5,学生表中共有多少学生
select count(*) from student; count(*)记行的
Group by语法:
可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表,SELECT子句中的列名必须为分组列或列函数。
1,要得到学生中每个班的最大年龄
select grade,max(age) from student group by grade;
2,每班平均年龄的学生的班级信息
select grade,avg(age) from student group by grade;
3,学生表中每班最小年龄的学生的班级、年龄信息
select grade,min(age) from student group by grade;
4,学生表中同一个地方的有多少人
select adress,count(*) from student group by adress;
5,学生表中每个班有多少个人
select grade,count(id) from student group by grade;
6,class1班同学同一地方的人数
select adress,count(*) from student where grade='class1' group by adress;
7,class1和class2的同学来自同一地方的人数
select adress,count(id) from student where grade='class2' or grade='class2 'group by adress;
8,来自同一地方的全部男同学
select adress,count(id) from student where sex='mal' group by adress;
Having语法:
可以筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by之后。而having子句在聚合后对组记录进行筛选
1,要得到学生中每个班的最大年龄并且最大年龄小于19岁的班级
select grade,max(age) from student group by grade having max(age)<19;
2,表中每班平均年龄大于16岁的班级、年龄信息
select grade,avg(age) from student group by grade having avg(age)>16;
3,表中每班最大年龄大于17岁的班级、年龄信息
select grade,max(age) from student group by grade having max(age)>17;
Order by语法:
使用ORDER BY子句对查询返回的结果按一列或多列排序(升序asc降序desc)。
1,每班平均年龄大于16岁的学生的姓名、班级、年龄信息并按照年龄降序排列
select name,grade,avg(age) from student group by grade having avg(age)>16 order by age desc;
2,每班最大年龄大于17岁的学生的姓名、班级、年龄信息并按照年龄降序排列
select name,grade,max(age) from student group by grade having max(age)>17 order by age desc;
3,根据年龄从小到大顺序排出学生的相关信息
select * from student order by age asc ;
4,按照学号升序排列学生的信息
select * from student order by number asc ;
5,根据年龄从大到小顺序排出学生的相关信息
select * from student order by age desc ;
6,小明同学想按照学号降序排列学生的信息
select * from student order by number desc ;
7,查看class1班所有学生的id、姓名、和性别,并以年龄的降序排列
select id,name,sex from student where grade='class1' order by age desc;
8,所有女生的姓名和电话,并以年龄升序排列学生的信息?
select name,phone from student where sex='femal' order by age desc;
Limit语法:用于强制 SELECT 语句返回指定的记录数。
1,学生中每个班的最大年龄并且显示从第二条开始显示两条
select grade, max(age) from student group by grade limit 1,2;
limit 1,2 :表示从第二行开始,显示两行(行数计数从0开始,即第一行的行标为0)
2,每班平均年龄大于16岁的学生的班级、年龄信息并按照年龄降序排列并取得前两行数据
select grade, age from student group by grade having avg(age)>16 order by age desc limit 0,2;
3,每班最大年龄大于17岁的学生的班级、年龄信息并按照平均年龄降序排列并从第二行开始取得三行数据
select grade, age from student group by grade having max(age)>17 order by avg(age) desc limit 1,3;
4,根据年龄从小到大顺序排出学生的相关信息并取得前五行数据
select * from student order by age asc limit 0,5;
查询语句:
SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 分组之后的行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定
注意:HAVING从句与WHERE从句的区别是,HAVING表达的是第二条件,在与其他从句配合使用,显然不能在WHERE子句中的项目使用HAVING
创建第二个表学生成绩表:performance:
create table performance(id int(4) not null auto_increment PRIMARY key,number
char(10) not null,name char(10) not null,grade char(10),course char(10) not null ,core
int(4) DEFAULT 0,time timestamp DEFAULT CURRENT_TIMESTAMP());
```
插入信息:
```
insert into performance(number, name, grade, course,core) values
('HP0001','li1','class1','develop',90),
('HP0001','li1','class1','test',80);
查询信息:
1. 列出performance表中,各班级名以及班级最高分和最低分。
select grade,max(core),min(core) from performance group by grade;
2. 列出performance表中,课程名为develop的各班级名以及班级的最高分和最低分。
select grade,max(core),min(core) from performance where course='develop' group by grade;
3. 列出performance表中,课程名为test的班级名,最低分数和最高分数,并且最低分数小于80的班级。
select grade,max(core),min(core) from performance where course='develop'
group by grade having min(core)<80;
4. 列出performance表中姓名不包含’li1’信息的所在班级中的每个学员的学号、姓名和班级名
select number,name, grade from performance where name not like'%li1%';
5. 列出performance表中test成绩大于平均成绩的学员的相关信息。
select * from performance where course='test' and core >(select avg(core) from performance where course='test') ;
多表查询语句:积笛卡尔积(交叉连接):
如:得到student表和performance表中的所有数据;
select performance.*,student.* from performance ,student;
列和表的别名用法:
1.在Mysql中数据库的表名在Unix操作系统上区分大小写,在windows上不区分大小写。
2.在Mysql中列名是不区分大小写的。
3.表的别名是区分大小写的。
4.列的别名是不区分大小写的。
Select S1.*,S2.* from student S1, performance S2;
union 和union all 的用法:
联合的意思,即把两次或多次查询结果合并起来,要求两次或多次查询的列数必须一致。
1. Union 对两个结果集进行并集操作,重复数据只显示一次。
2. Union All,对两个结果集进行并集操作,重复数据全部显示。
如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并将S1表中的列 id、number、name、grade与S2表合并起来。
(Select S1.id, S1.number, S1.name, S1.grade from student S1)
Union (select S2.id, S2.number, S2.name, S2.grade from performance S2)
左连接的用法:
left join (left outer join):对于左连接,不仅匹配前面的行记录,而且还显示左边的表,而右边的表中无匹配的行。对于这样的行,从右边表选择的列均被显示为NULL。这样,每一匹配的行都从左边的表被选出,而如果右边表有一个匹配的行,则被选中,如果不匹配,行仍然被选中,不过,其中右边相应的列在结果集中均设为NULL。即,LEFT JOIN强制包含左边表的每一行,而不管右边表是否匹配。
如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并查询出S1表中所有学生的相关成绩。
SELECT s1.name,s1.grade,s2.course,s2.core from student s1 left join performance s2 on s1.name = s2.name where s1.grade=‘class2’;
内连接的用法:
内连接的数据记录中,不会存在字段为NULL的情况。可以简单地认为,内链接的结果就是在左连接或者右连接的结果中剔除存在字段为NULL的记录后所得到的结果。
如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并查询出student表中与performance表中都存在的学生的成绩,并且是class2班的学生。
s2 on s1.name = s2.name where s1.grade=‘class2’;