一、前言入门

基本概念的介绍

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。(百度百科)


Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
(本文不涉及数据库完整性的学习,只是SQL语句的快速入门单表操作)


  • DDL(Data Definition Language)数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

  • DML(Data Manipulation Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

  • DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where 等

  • DCL(Data Control Language)数据控制语言

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

mysql的基本数据类型

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门

atetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss timestamp:时间错类型 包含年月日时分秒
yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

启动数据库

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_02


成功后是这样的

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_03

二、具体内容

DDL:操作数据库、表

操作数据库

1 创建数据库

create database if not exists 数据库名称;
create database if not exists db4 character set gbk

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_04


2 删除数据库

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_05

3 查询数据库的定义:show create database 数据库名称;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_06


4 Update:修改数据库的字符集

alter database 数据库名称 character set 字符集名称;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_07


使用数据库:use 数据库名称;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_08


表的基本操作

1 创建

create table 表名(
				列名1 数据类型1,
				列名2 数据类型2,
				....
				列名n 数据类型n
			);

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_09


2 查询test数据库中所有的表名称:show tables;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_10


查询表结构:desc 表名;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_11

查询表定义的SQL语句:

show create table student;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_12

3 修改表

修改表名:alter table 表名 rename to 新的表名;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_13


修改表的字符集:alter table 表名 character set 字符集名称;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_14


添加一列:alter table 表名 add 列名 数据类型;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_15


修改列名称 类型

alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_16


4 删除列:alter table 表名 drop 列名;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_17

drop table if exists 表名 ; 自己可以自行体验。

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_18

DML:增删改表中数据

1 添加数据:语法:

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_19

  • 注意

  • 如果表名后,不定义列名,则默认给所有列添加值
    insert into 表名 values(值1,值2,…值n);

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_20


我们可以看到成功的插入了 6条数据,男女搭配了一下,都是不老男神和70年的中国美女。

2 删除数据

delete from 表名 [where 条件]

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_21


TRUNCATE语句和DELETE语句的区别





3 修改数据:
带条件修改数据:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

要求:将 id 号为 6 的张曼玉 名字 改为 温碧霞,再看看表中的数据

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_22

DQL:查询表中的记录

select 字段列表  from 表名;

1 语法: 语法语句的基本排列,根据查询的具体要求 会稍有改动

  • select 字段列表
  • from 表名列表
  • where 条件列表
  • group by 分组字段
  • having分组之后的条件
  • order by 排序
  • limit 分页限定

2 基础查询

我们重新创建一个表(表的完整性我们不做过多定义)

CREATE TABLE `student` ( 
      `id` int(11) ,
      `NAME` varchar(20) DEFAULT NULL,
      `chinese` float DEFAULT NULL,
      `english` float DEFAULT NULL,
      `math` float DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf

表中的数据如下

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_23


多个字段的查询

select 字段名1,字段名2... from 表名;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_24


去除重复: distinct (用了之前的stu表)

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_25


计算列:一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

这里使用了起别名 – as 别名

ifnull(表达式1,表达式2):null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_26


mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_27

修改各科成绩的别名:

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_28


3 条件查询

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_29


查询数学成绩大于 70 的人的所有信息

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_30


查询数学和英语成绩大于 70 的人的所有信息

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_31


查询数学成绩等于90,92,,77的信息

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_32


查询 语文成绩在 80 - 90 之间的人的信息

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_33


LIKE:模糊查询

占位符:
_:单个任意字符
%:多个任意字符

查询姓张的有哪些? like

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_34


查询姓名是3个字的人 , 这样布拉德皮特就除外了

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_35

DQL:查询语句

表中的数据

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_36


1 排序查询

order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...

排序方式:

  • ASC:升序,默认的。
  • DESC:降序。

注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。


SQL语句

select *,(chinese + english + math) 总分 from student order by 总分;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_37


SQL语句

select *,(chinese + english + math) 总分 from student where name like '张%'order by 总分 asc;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_38


2 聚合函数:将一列数据作为一个整体,进行纵向的计算

聚合函数

含义

count(*)

计算个数(非空)

max

计算最大值

min

计算最小值

sum

计算和

avg

计算平均值


SQL语句

SELECT COUNT(id) FROM student WHERE (chinese + english + math) > 250;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_39


SQL语句

SELECT  SUM( chinese + english + math ) 各科成绩总和, FORMAT(AVG(chinese + english + math), 2) 总分平均分 FROM student;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_40

3 分组查询

我们添加了一个年龄,性别的字段,方便我们分组查询。

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_41


where 和 having 的区别?

  • where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
  • where 后不可以跟聚合函数,having可以进行聚合函数的判断。

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_42


mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_43

  • 要求:查询男女各多少人(查询步骤如下)
  • 查询所有数据,按性别分组
  • 统计每组的人数

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_44


mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_45


sql语句

select gender,count(id) from student where age > 55 group by gender having count(id) > 2;

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_SQL快速入门_46


mysql检索每个班级男女女生人数 sql查询各个班的男女人数_mysql检索每个班级男女女生人数_47

4 limit分页

limit(offset,length) 跟数组下标 差不多
offset :起始行数,从 0 开始计数,如果省略,默认就是 0
length :返回的行数

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_分组查询_48

分页使用场景

:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_聚合函数_49

总结

mysql检索每个班级男女女生人数 sql查询各个班的男女人数_DOS窗口实现_50