MYSQL语言知识点大全2

可以把from读成来自于,比如 from student 可以读成“来自于学生表”可以帮助理解

第一部分:今日技术操作及SQL基础语法

一.数据库的备份
[1]数据库的备份
*第一步:打开cmd的命令行窗口
输入:mysqldump -u root -p**** itheima > d:\itheima.sql; 把数据库名称备份到指定路径目录
[2]数据库的还原
需要重新cmd输入mysql用户名和密码才能执行下面还原流程
*第一步:在数据库服务器内部创建数据库
create database itheima;
*第二步:切换到该数据使用source命令还原
user itheima;
source d:\itheima.sql; 从存储的路径下把数据库名称还原

二.SQL对数据库表的记录进行操作(重点)
1.SQL添加表的记录
[1]语法:
*向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
*向表中插入所有列:insert into 表名 values (值1,值2,值3…);
[2]注意事项:
*值的类型与数据库中表列的类型一致。
*值的顺序与数据库中表列的顺序一致。
*值的最大长度不能超过列设置最大长度。
*值的类型是字符串或者是日期类型,使用单引号引起来。
[3]添加表记录(表名为student)
*添加某几列 insert into student(id,username,password)values(null,’aaa’,’123’);
*添加所有列 insert into student values(null,’bbb’,’123’,23,’1993-09-01’);
*添加中文记录 insert into student values(null,’张三’,’123’,23,’1993-09-01’); 【小黑窗不支持中文,如果要想添加中文,可以暂时把小黑窗代码格式临时改成gbk,set name gbk;】
【小窍门:正读反写】
2.SQL修改表的记录
[1]语法:
*update 表名 set 列名=值,列名=值 [where 条件];
[2]注意事项:
*值的类型与列的类型一致。
*值的最大长度不能超过列设置的最大长度。
*字符串类型和日期类型添加单引号。
[3]修改表记录(表名为student)
*修改某一列的所有值 update student set password=’abc’;
*按条件修改数据 update student set password=’xyz’ where username = ‘bbb’;
*按条件修改多个列 update student set password=’123’,age=34 where username=’aaa’;

3.SQL删除表的记录
[1]语法:
*delete from 表名 [where 条件];
[2]注意事项:
*删除表的记录,指的是删除表中的一行记录。
*删除如果没有条件,默认是删除表中的所有记录。
[3]删除表记录(表名为student)
*删除某一条记录 delete form student where id=2;
*删除表中所有记录 delete form student;
[4]删除表中的记录有两种做法:
*delete from student;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的 删除后可以回滚 rollback;
*truncate table student;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的 删除就找不到了

三.SQL查看表的记录(重点)
*环境准备
create table exam(
id int primary key auto_increment,
name varchar(20),
english int,
chinese int,
math int
);

insert into exam values (null,’张三’,85,74,91);
insert into exam values (null,’李四’,95,90,83);
insert into exam values (null,’王五’,85,84,59);
insert into exam values (null,’赵六’,75,79,76);
insert into exam values (null,’田七’,69,63,98);
insert into exam values (null,’李老八’,89,90,83);

1.基本查询
[1]语法:
select [distinct] |列名 from 表 [条件]; 【[distinct] *|列名 表示重复的列名,题目要求去重复时可以加,不要求就不需要加】
[2]基本查询表记录(表名为exam)
*查询所有学生考试成绩信息 select*from exam;
*查询所有学生的姓名和英语成绩 select name,english from exam;
*查询英语成绩信息(不显示重复的值) select distinct english from exam;
*查看学生姓名和学生的总成绩 select name,english+chinese+math from exam;
*别名查询(换个见名知意的名字) select name,english+chinese+math as sum from exam;

2.条件查询
[1]使用where子句
*> , < , >= , <= , <>(不等于) ,=
*like:模糊查询
*in:范围查询 not in 不在范围
*条件关联:and(并且) , or(或者) ,not
as取别名 distinct重复的

    *like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。_只能代表一个字符,而%可以代表任意个字符。
        *like ‘李_’      :名字中必须是两个字,而且是姓李的。
        *like ‘李%’      :名字中姓李的学生,李子后可以是1个或任意个字符。    【有两个字或者三个字或者四个字都可以】
        *like ‘%四’      :名字中以四结尾的。
        *like ‘%王%’ :只要名称中包含这个字就可以。

[2]条件查询表记录(表名为exam)
    *查询李四学生的成绩                      select*from exam where name='李四';
    *查询名称叫李四的学生并且英文大于90分    select*from exam where name = '李四' add english > 90;
    *查询姓李的学生的信息                 select*from exam where name like '李%';
    *查询英语成绩是69,75,89学生的信息       select*from exam where english in (69,75,89);

3.排序查询
[1]语法:
*使用order by 字段名称 asc/desc; (升序/倒序、降序)–(小到大/大到小)
[2]排序查询表记录(表名为exam)
*查询学生信息,并且按照语文成绩进行排序 select*from exam order by chinese; 【没有写升序倒序,系统默认为升序】
*查询学生信息,并且按照语文成绩倒序排序 select*from exam order by chinese desc;
*查询学生信息,先按照语文成绩进行倒序 select*from exam order by chinese desc,english asc;
排序,如果成绩相同在按照英语成绩升序
*查询姓李的学生的信息,按照英语成绩降序排序 select*from exam where name like ‘李%’ order by english desc;

4.分组统计查询
[1]聚合函数使用
A: sum();
*获取所有学生的英语成绩的总和 select sum(english) from exam;
*获取所有学生的英语成绩和数学成绩总和 select sum(english),sum(math) from exam;
*查询姓李的学生的英语成绩的总和 select sum(english) from exam where name like ‘李%’;
*查询所有学生各科的总成绩 select sum(english)+sum(chinese)+sum(math) from exam;
*select sum(english+chinese+math) from exam;
与上面的语句有什么不同?
上面的语句是按照列的方式统计,英语成绩总和+语文成绩总和+数学成绩总和。
下面的语句先计算英语+数学+语文然后再求和。
使用ifnull的函数 如果英语这个成绩有null的话,我们就把null看成是0,应为null如果不看成0的话,null加上任意一个数,都为null,数据就不对了
select sum(ifnull(english,0)+chinese+math) from exam;

    B: count();
    *获得学生的总数                select count(*) from exam;
    *获得姓李的学生的个数     select count(*) form exam where name like '李%';

    C: max();
    *获得数学成绩的最高分     select max(math) from exam;

    D: min();
    *获得语文成绩的最小值     select min(chinese) from exam;

    E: avg();
    *获取语文成绩的平均值     select avg(chinese) from exam;

5.分组查询
[1]语法:
使用group by 字段名称;

[2]环境准备
create table orderitem(
id int primary key auto_increment,
product varchar(20),
price double
);

insert into orderitem values (null,’电视机’,2999);
insert into orderitem values (null,’电视机’,2999);
insert into orderitem values (null,’洗衣机’,1000);
insert into orderitem values (null,’洗衣机’,1000);
insert into orderitem values (null,’洗衣机’,1000);
insert into orderitem values (null,’冰箱’,3999);
insert into orderitem values (null,’冰箱’,3999);
insert into orderitem values (null,’空调’,1999);

[3]分组查询表记录(表名为orderitem)
    *按商品名称统计,每类商品所购买的个数     select product,count(*) from orderitem group by product;
    *按商品名称统计,每类商品所花费的总金额        select product,sum(price)
    *where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
    *按商品名称统计,统计每类商品花费的          select product,sum(price) from orderitem group by product having sum(price)
      总金额在5000元以上的商品
    *按商品名称统计,统计每类商品花费的总金额
    在5000元以上的商品,并且按照总金额升序排序  select product,sum(price) from orderitem group by product having sum(price)>5000 order by sum(price) asc;

总结:S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
顺序是不可颠倒的,如果里面有些是没有的,比如没有条件where,那么可以不要,但是只要代码里面有这些基础语法的,总的顺序不可颠倒
where后面不能有聚合函数

四.博哥上课单表代码补充
===2018-06-07 AM===

CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
sage INT NOT NULL,
score DOUBLE,
birthday DATE
);

– 插入数据
INSERT INTO student (sid,sname,sage,score,birthday) VALUES (NULL,’张三’,23,85.5,’1999-09-09’);
INSERT INTO student VALUES (NULL,’李四’,24,78,’1998-08-08’);

INSERT INTO student VALUES (NULL,’王五’,25,87,’1997-08-08’),
(NULL,’赵六’,26,66,’1996-06-06’);

– 修改:将王五的年龄改成35岁
UPDATE student SET sage=35 WHERE sname=’王五’;

– 修改:将赵六的年龄修改为36岁,成绩修改为96
UPDATE student SET sage=36,score=96 WHERE sname=’赵六’;

– 修改:将成绩为78分和87分的人的年龄全部修改为55岁
UPDATE student SET sage=55 WHERE score=78 OR score=87; 【成绩78分或者87分的年龄修改成55岁】

– 修改:将年龄在23岁的并且成绩是85.5分的人的姓名修改为张三三
UPDATE student SET sname=’张三三’ WHERE sage=23 AND score=85.5;

– 修改:将分数在78分到96分之间的(包括)的年龄修改为44岁
UPDATE student SET sage=44 WHERE score >= 78 AND score <= 96;
UPDATE student SET sage=34 WHERE score BETWEEN 78 AND 96; 【范围关键字可以用between】

– 修改:将分数为78/87/96分的人的年龄修改为22岁
UPDATE student SET sage=22 WHERE score=78 OR score=87 OR score=96;
UPDATE student SET sage=23 WHERE score IN (78,87,96);

– 删除:将姓名为张三三的人删除
DELETE FROM student WHERE sname=’张三三’;

– 删除:出生日期在1996-05-05到1999-09-09之间的记录
DELETE FROM student WHERE birthday >= ‘1996-05-05’ AND birthday <= ‘1999-09-09’;
DELETE FROM student WHERE birthday BETWEEN ‘1996-05-05’ AND ‘1999-09-09’;

===2018-06-07 PM===

CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
sage INT NOT NULL,
score DOUBLE NOT NULL,
birthday DATE NOT NULL,
classroom VARCHAR(20) NOT NULL
);

– 插入数据
INSERT INTO student VALUES (NULL,’张三’,23,85,’1990-09-09’,’黑马一期’);
INSERT INTO student VALUES (NULL,’李四’,25,89,’1996-05-09’,’黑马一期’);
INSERT INTO student VALUES (NULL,’王五’,24,78,’1995-08-09’,’黑马一期’);
INSERT INTO student VALUES (NULL,’赵六’,22,94,’1992-05-14’,’黑马一期’);
INSERT INTO student VALUES (NULL,’周七’,21,79,’1991-03-22’,’黑马一期’);
INSERT INTO student VALUES (NULL,’阿花’,26,67,’1995-07-26’,’黑马二期’);
INSERT INTO student VALUES (NULL,’小花’,28,88,’1997-09-19’,’黑马二期’);
INSERT INTO student VALUES (NULL,’欧阳小花’,22,79,’1998-01-26’,’黑马二期’);
INSERT INTO student VALUES (NULL,’宇文正极’,25,68,’1992-02-14’,’黑马二期’);
INSERT INTO student VALUES (NULL,’西门吹雪’,24,87,’1990-04-13’,’黑马二期’);

– 查询所有
SELECT * FROM student;

– 查询:查询学生表中的姓名和年龄的数据
SELECT sname,sage FROM student;

– 查询:去除重复的信息
SELECT DISTINCT sage FROM student;

– 查询:查询年龄加上分数
SELECT sname,sage+score AS ‘getSum’ FROM student;

– 查询:查询出年龄在23岁到25岁之间的,并且成绩在80分以上的学生信息
SELECT * FROM student WHERE sage >= 23 AND sage <= 25 AND score >= 80;

– 查询:查询生日在1992年1月1号到1995年5月5号之间的,并且年龄小于23岁的学员信息
SELECT * FROM student WHERE birthday >= ‘1992-01-01’ AND birthday <= ‘1995-05-05’ AND sage < 23;
SELECT*FROM itheima WHERE birthday BETWEEN ‘1992-01-01’ AND ‘1995-05-05’ AND sage < 23; 【最后条件是查询所有学院信息,所以加*,from是来自于的意思,所以后面写表名,是来自于student这个表,然后后面就是需要那么足条件了,所以写个where,注意的是日期要加上单引号】

– 查询:查询年龄小于25岁的 或者 分数大于95分的学员的姓名
SELECT sname FROM student WHERE sage < 25 OR score > 95; 【思路:我们要查询东西所以用select,我们查询的是学员姓名,不是整个学员信息,就不用*,然后select后面直接跟snmae,然后就是来自于哪,就是来自于表,所以就是from student,那么条件是什么呢,就加个where,写SQL单表诀窍反读正写】

– 查询:查询分数是85/89/78/79分的学员所有信息
SELECT * FROM student WHERE score=85 OR score=89 OR score=78 OR score=79;
SELECT * FROM student WHERE score IN (85,89,78,79);

– 查询:查询出姓名中包含花的人员的所有信息
SELECT * FROM student WHERE sname LIKE ‘%花%’;

– 查询:查询出姓名长度在4个的人员信息
SELECT * FROM student WHERE sname LIKE ‘__‘;

– 查询:查询出姓名长度为4的、并且分数大于80分的
SELECT * FROM student WHERE sname LIKE ‘__’ AND score > 80;

– 查询:按照年龄的升序排序
SELECT * FROM student ORDER BY sage ASC;

– 查询:按照分数的降序排序
SELECT * FROM student ORDER BY score DESC;

– 查询:查询名称长度为4的学员成绩,按照降序排序 (练习错,看)
SELECT * FROM student WHERE sname LIKE ‘_’ ORDER BY score DESC; 【order by 后面要加上要查询的字段名 _ 后面不要加and】

– 查询:查询分数在80–100分之间 按照分数的降序排序
SELECT * FROM student WHERE score BETWEEN 80 AND 100 ORDER BY score DESC;

– 查询:查询分数在80–100分之间,并且姓名中包含”花” 按照成绩的降序排序
SELECT * FROM student WHERE score BETWEEN 80 AND 100 AND sname LIKE ‘%花%’ ORDER BY score DESC; 【模糊查询不能用等于,用like】
SELECT*FROM itheima WHERE score >= 80 AND score <= 100 AND sname LIKE ‘%花%’ ORDER BY score DESC;

– 查询:统计学生表中总记录数
SELECT COUNT(*) FROM student;

– 查询:统计名称长度为4的总个数
SELECT COUNT(*) FROM student WHERE sname LIKE ‘__‘;

– 查询:求出总的分数
SELECT SUM(score) FROM student;

– 查询:求出总分并把查询名改为“总分”
SELECT SUM(score) AS 总分 FROM itheima; 【as 就是改名字】

– 查询:求出名称中包含”花”的总成绩
SELECT SUM(score) FROM student WHERE sname LIKE ‘%花%’;

– 查询:求出平均年龄
SELECT AVG(sage) FROM student;

– 查询:求出名称长度为4的平均年龄
SELECT AVG(sage) FROM student WHERE sname LIKE ‘__‘;

– 查询:求最大的年龄
SELECT MAX(sage) FROM student;

– 查询:求名称包含”花”的人的最大年龄
SELECT MAX(sage) FROM student WHERE sname LIKE ‘%花%’;

– 查询:求最低分
SELECT MIN(score) FROM student;

– 查询:年龄范围在23–24岁之间的 最低分数
SELECT MIN(score) FROM student WHERE sage >= 23 AND sage <= 24;
SELECT MIN(score) FROM itheima WHERE sage BETWEEN 20 AND 24;

– 查询:统计每个班级的总分数
SELECT SUM(score),classroom FROM student GROUP BY classroom;

– 查询:统计每个班级的总分数,按照总分数的升序排序
SELECT SUM(score) AS ‘getSum’,classroom FROM student GROUP BY classroom ORDER BY getSum ASC;

– 查询:统计每个班级年龄在22–25岁之间的总分数。只显示总分数大于200分的,按照总分数降序排序
SELECT SUM(score) AS ‘getSum’,classroom FROM student WHERE sage BETWEEN 22 AND 25 GROUP BY classroom HAVING getSum >= 200 ORDER BY getSum DESC;

猜你喜欢

转载自blog.csdn.net/pf503603/article/details/81625192
今日推荐