软件安装

链接

  1. MySQL安装过程的步骤:按照上述链接一步一步安装即可
  2. MySQL端口号是:3306
  3. 管理员名字:root
  4. 将mysql的bin目录配置到path环境变量中

    采用cmd窗口命令登录

  5. 打开cmd窗口,使用mysql命令,使用root用户登录 mysql -uroot -pxxx

  6. 使用root用户,以ip地址形式登录数据库 mysql -h 127.0.0.1 -u root -pxxxx

    SQL语句分类

    ```plsql SQL特点 sql语句是一个非过程性的语言,每一条sql执行完都会有一个具体的结果出现。多条语句之间没有影响过程性语言:例如java。 int a = 10; int b = 23; int sum = a + b; SQL的作用 sql语句主要是操作数据库,数据表,数据表中的数据记录
  7. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create drop alter truncate(清空数据记录) show等
  8. DML(Data Manipulation Language)数据操作语言★★★ 在数据库表中更新,增加和删除记录。如 update(更新), insert(插入), delete(删除) 不包含查询
  9. DQL(Data Query Language) 数据查询语言★★★★★ 数据表记录的查询。关键字select。
  10. DCL(Data Control Language)数据控制语言(了解) 是用来设置或更改数据库用户或角色权限的语句,如grant(设置权限),revoke(撤销权限),begin transaction等。这个比较少用到。
    1. <a name="DaHTI"></a>
    2. #### sql字段类型
    3. <br /> 1.数据型<br /> 1.Java<br /> 整型byte short int long(1 2 4 8)字节<br /> 浮点型 float double<br /> 2,sql<br /> 整型 tinyint smallint int bigint (1 2 3 4 8 )字节<br /> 浮点型(int double)<br /> 常用(int double)<br /> 2.字符型<br /> 1.Java<br /> char:2个字节<br /> String:字符串<br /> 2.sql<br /> char:字符 name char(10) 表示字符长度固定为10 ,如果不足自动用空格补足<br /> varchar:可变的字符variable char, name varchar(10) 表示字符长度最大为10,按实际占用计算<br /> varchar 省存储空间,但是char效率更高一些<br /> (varchar常用 char 可能用到)<br /> 3.日期型<br /> 1.date:年月日<br /> 2.time:时分秒<br /> 3.datetime:年月日时分秒<br /> 4.timestamp:年月日时分秒系统当前时间
    4. <a name="LJlQC"></a>
    5. #### 练习:
    6. <a name="zS78f"></a>
    7. #### 创建数据库练习
    8. ```sql
    9. # 0.创建数据库练习
    10. # 1.直接创建数据库db3
    11. create database db3;
    12. # 2.判断是否存在并创建数据库db4
    13. create database if not exists db4;
    14. # 查看仓库的创建语句
    15. show create database db4;
    16. # 3.查看所有的数据库
    17. show databases ;
    18. # 4.删除db3数据库 remove delete drop truncate
    19. drop database db3;
    20. # 5.查看正在使用的数据库
    21. select database();
    22. # 6.使用db4数据库
    23. use db4;

    创建表练习


    - 需求:设计一张学生表,请注重数据类型、长度的合理性
    1.编号
    2.姓名,姓名最长不超过10个汉字
    3.性别,因为取值只有两种可能,因此最多一个汉字
    4.生日,取值为年月日
    5.入学成绩,小数点后保留两位
    6.邮件地址,最大长度不超过 64
    7.家庭联系电话,不一定是手机号码,可能会出现 -
    8.学生状态(用数字表示,正常、休学、毕业…)
    1. create table student(
    2. id int,
    3. name varchar(10),
    4. sex char(1),
    5. birthday date,
    6. score double,
    7. email varchar(64),
    8. tel varchar(20),
    9. status int
    10. );
    image.png
    相当于class Student {
    private int id;
    private String name;
    }

    更改表练习

    ```sql

    — 1.修改student表名为stu

    alter table student rename to stu;

    — 2.给学生表添加一列remark,类型为varchar(20)

    alter table stu add remark varchar(20);

    — 3.修改remark列的类型是varchar(100)

    alter table stu modify remark varchar(100);

    — 4.修改remark列的名变为intro,类型varchar(30)

    alter table stu change remark intro varchar(30);

    — 5.删除intro列

    alter table stu drop intro;

— 查询所有的表 show tables; — 查询表创建语句 show create table stu; — 查询表结构 desc stu; — description 详情 — 删除 drop table stu;

  1. <a name="aXQuM"></a>
  2. #### 添加数据
  3. ```sql
  4. # -- 1.创建表
  5. create table student2(
  6. id int,
  7. name varchar(20),
  8. age int,
  9. birthday date,
  10. sex char(2),
  11. address varchar(100)
  12. );
  13. show tables;
  14. # -- 2.插入部分数据,给id name age sex赋值
  15. /*
  16. 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号
  17. 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以
  18. */
  19. insert into student2(id,name,age,sex) values(1,'zs', 18 , '男');
  20. # -- 3.插入所有的字段,不写字段名
  21. insert into student2 values(2,'ls',19,'1995-01-01','女','上海');
  22. # -- 4.插入所有的字段,写出字段名
  23. insert into student2(id, name, age, birthday, sex, address)
  24. values(3,'ww',19,'1996-01-01','男','杭州');
  25. # -- 5.批量插入数据
  26. insert into student2
  27. values (4,'ml',21,'1996-01-01','男','杭州'),(5,'qq',22,'1997-01-01','男','南京');
  28. # -- 插入数据注意
  29. # -- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null
  30. insert into student2
  31. values (6,'sb',22,'1998-01-01','男',null);

运行效果:
image.png

修改数据

  1. # -- 1.修改数据:修改性别都变为女(不安全:如果修改语句不加条件,默认是全选)
  2. update student2 set sex = '女';
  3. # -- 2.修改数据:带条件修改id是2的学生性别变为男
  4. update student2 set sex = '男'
  5. where id = 2;
  6. # -- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
  7. update student2 set age = 26,address = '北京'
  8. where id = 3;

运行效果:
image.png

删除数据

  1. # -- 1.带条件删除数据,删除id是3的记录
  2. delete from student2
  3. where id = 3;
  4. # -- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2
  5. delete from student2
  6. where id in (1,2); /* where id 1 or 2; 也行 */
  7. # -- 3.不带条件删除
  8. # -- 还可以使用:DDL
  9. # -- 这里的table可以省略
  10. delete from student2; -- 删除表中所有的数据(可以撤销)
  11. truncate table student2; -- 删除表中所有的数据(不可以撤销)
  12. start transaction ;
  13. delete from student2; -- DML
  14. rollback ;
  15. start transaction ;
  16. truncate table student2; -- DDL
  17. rollback ;

查询数据

image.png
写出查询每列的名称:
image.png
image.png
image.pngimage.png

  1. # 7.带条件的查询
  2. # -- 1.查询数学成绩大于80学生
  3. select * from student3 where math > 80;
  4. # -- 2.查询英语成绩小于等于80学生
  5. select * from student3 where english <= 80; -- 小于或等于
  6. # -- 3.查询年龄等于20的学生
  7. select * from student3 where age = 20;
  8. # -- 4.查询年龄不等于20的学生
  9. select * from student3 where age != 20;
  10. select * from student3 where age <> 20; -- 大于或小于,就是不等于
  11. # -- 5.查询年龄大于35并且性别是男的学生
  12. select * from student3 where age > 35 and sex = '男'; -- &&
  13. # -- 6.查询年龄大于35或者性别是男的学生
  14. select * from student3 where age > 35 or sex = '男'; -- ||
  15. # -- 7.查询id是1 3 5的学生
  16. select * from student3 where id = 1 and id = 3 and id = 5;
  17. select * from student3 where id in (1 , 3 , 5); -- 简写
  18. # -- 8.查询id不是1 3 5的学生
  19. # -- not in 是in的取反,表示不在什么其中
  20. select * from student3 where id != 1 and id != 3 and id != 5;
  21. select * from student3 where id not in (1 , 3 , 5); -- 简写
  22. # -- 范围查询
  23. # -- 9.英语成绩在75和90之间
  24. select * from student3 where english >= 75 and english <= 90;
  25. select * from student3 where english between 75 and 90; -- between:在...之间,

image.pngimage.pngimage.png

排序

image.png

聚合函数:

— 介绍:多个数据进行计算,结果只有一个
— 常用:sum(求和) avg(平均) count(统计)max(最大值)min(最小值)
— 注意: null不是数据,表示没有数据,不会被聚合函数列入运算

  1. # -- 16.查询学生总数即有多少名学生
  2. select count(id) from student3; -- 8
  3. select count(english) from student3; -- 7 柳青没考 english的值为null
  4. select count(*) from student3; -- * 表示所有 只有一行数据有一个列有值就会列入运算
  5. # -- 17.查询数学成绩总分数
  6. select sum(math) from student3; -- 636
  7. # -- 18.查询数学成绩最高分数
  8. select max(math) from student3; -- 99
  9. # -- 19.统计数学和英语总和值
  10. # -- 实现一:分别统计数学和英语的每个总成绩,然后进行相加
  11. select sum(math) from student3; -- 636
  12. select sum(english) from student3; -- 570
  13. select sum(math) + sum(english) from student3; -- 1206
  14. # -- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加
  15. select sum(math + english) from student3; -- 1120
  16. select math + english from student3; -- 先求每个人的数据成绩总和,然后聚合运算
  17. select math,english from student3;
  18. select math ,ifnull(english , 0) from student3; -- if english is null then english = 0;
  19. select math + ifnull(english , 0) from student3;
  20. select sum(math + ifnull(english , 0)) from student3; -- 1260
  21. /*
  22. 结果是:380 少了柳岩的90
  23. sum(math+english):
  24. 问题原因:
  25. 解决上述问题:使用mysql自带函数:ifnull(字段值,默认值)
  26. 说明:
  27. ifnull(字段值,默认值)
  28. 如果字段值是null,那么使用默认值作为ifnull函数的整体结果
  29. 如果字段值不是null,那么使用字段值作为ifnull函数的整体结果
  30. 举例:
  31. ifnull(english,0):
  32. 1)假设english的值是null===>ifnull(null,0)===>整体结果是0
  33. 2)假设english的值是80===>ifnull(80,0)===>整体结果是80
  34. */

分组

  1. // 准备数据
  2. create table car(
  3. id int,
  4. color char(2),
  5. price float
  6. );
  7. insert into car(id,color,price) values(1,'黄色',16);
  8. insert into car(id,color,price) values(2,'黄色',16);
  9. insert into car(id,color,price) values(3,'蓝色',5);
  10. insert into car(id,color,price) values(4,'红色',60);
  11. insert into car(id,color,price) values(5,'白色',8);
  12. insert into car(id,color,price) values(6,'红色',60);
  13. # -- 1.查询每种颜色车辆的总价
  14. select sum(price) from car; -- 查询所有汽车的总价
  15. select * from car group by color; -- 查询每种颜色车的单价
  16. select color , sum(price) from car group by color; -- 查询每种颜色车的总价
  17. # -- 2.查询每种颜色车辆总价大于30车辆的颜色和总价
  18. select color , sum(price) from car group by color
  19. having sum(price) > 30; -- having 后面跟聚合函数 (因为此时聚合函数还没执行)

select语句执行顺序

  1. <br /> select 字段 聚合函数 五<br /> from 表名 一<br /> where 条件 二<br /> group by 字段分组 三(聚合函数在分组之后运行的)<br /> having 条件2 四(一般跟分组一起使用,对分组结果进行过滤)<br /> order by 排序字段 六<br /> limit 限制 七<br /> 1,select语句必须有select 和 from关键字<br /> 2.其他关键字可以有可以没有,但是如果有,书写必须按照指定顺序<br /> 3.每个关键字后的数字表示其执行的顺序<br /> 4.where效率比having高的,但是where中不能使用聚合函数
  1. -- 4.查询车的单价大于15的每种颜色车辆总价大于30车辆的颜色和总价
  2. select color,sum(price)
  3. from car
  4. where price > 15
  5. group by color
  6. having sum(price) > 30;

分页

  1. select * from car; -- 查询所有 在开发中不会用
  2. -- 1.数据量太多,服务器压力大
  3. -- 2.用户也不需要
  4. -- 分页查询:比如一页显示2条数据,总共6条分3
  5. select * from car limit 0 , 2; -- 0索引开始,查询最多2条记录
  6. select * from car limit 0 , 2; -- 第一页
  7. select * from car limit 2 , 2; -- 第二页
  8. select * from car limit 4 , 2; -- 第三页
  9. -- 假设limit index , count: 且当前页码为page
  10. -- 已知countpage的前提下求index
  11. -- index = (page - 1) * count