S Q L

SQL

1. 数据库的介绍

1.1 数据库是什么

数据库其实就是存储和管理数据的仓库

在一些公司中,我们常见的其实就是使用Excel来存储和管理数据。我们的数据库其实就是和Excel是一样的作用,其表现形式类似的。

那我们为什么要学习数据库呢?为什么不使用Excel来存储和管理数据呢?最重要的原因其实就是因为Excel不够强大。

1.2 数据库的分类

数据库这种应用有很多产品。可以分为两大类

关系型数据库

指这种数据库不光光可以用来存储数据,还可以存储数据与数据之间的关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tZ9UUeYH-1641383478890)(SQL.assets/image-20211119103541195.png)]

关系型数据库有哪些产品呢?

  • **Oracle **

    Oracle这个公司一直都是做Oracle数据库发家的。Oracle这个数据库是世界上使用的最多的一个收费的产品。

  • MySQL

    MySQL之前是一个开源的,免费的数据库产品,很多公司在用。当前已经被Oracle收购了,有两个版本,社区版和收费版。

  • SQL server

    是一个微软开发的数据库产品,现在还是有一定的市场份额的。

  • MariaDB

    其实就是MySQL的同一个作者搞出来的一个开源的数据库

  • Access

    Access是Office套件的一员,是一个微软开发出来的数据库,基本没人用

  • SQLite

    是一个微型的数据库产品。在Android操作系统中用来存储联系人、短信、通讯录等等内容

  • OceanBase

    这个是一个国产(Alibaba)的数据库产品,历史还不是很长。

非关系型数据库

非关系型数据库仅仅用来存储数据。非关系型数据库又有一个名字,叫NoSQL。

NoSQL : Not only SQL。意思是作为关系型数据库的一个良好的补充。为什么关系型数据库需要一个补充产品呢?主要是因为关系型数据库的这些产品都是把数据存储在磁盘上,存储在磁盘上就会导致读写效率很低,所以在应对需要读写速度快的这种场景的时候,我们就需要一些把存储在内存上的数据库。

非关系型数据库的主要特点就是:读写速度快

  • Redis

    是目前使用的最多的一个NoSQL产品

  • Memcache

    是一个Redis之前的一个产品

  • MongoDB

  • Cassandra

1.2 SQL的介绍

关系型数据库都遵循统一的语法:SQL

SQL:Structured Query Language ,结构化的查询语言。现在市面上所有的关系型数据库都支持SQL语法标准。各个数据库产品有自己的语法标准,类似于方言。但是绝大多数的关系型数据库都支持SQL标准语法。所以我们把SQL标准语法学习好就可以了。

2. 安装数据库

安装MySQL

我们采用的MySQL这个数据库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOM3DDCk-1641383478893)(SQL.assets/image-20211119110257054.png)]

安装MySQL的要求

  • 如果有5.7以外的别的版本的MySQL,先卸载掉再装
  • 密码要求统一:123456

如何证明MySQL数据库安装成功呢?

  • 查看服务

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5oG4RzOv-1641383478894)(SQL.assets/image-20211119110730287.png)]

  • 执行指令,连接MySQL

    mysql -uroot -p
    

    然后输入密码 123456 连接上MySQL就可以了

图形化界面客户端

我们这里采用Navicat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGedBt1S-1641383478895)(SQL.assets/image-20211119111208767.png)]

如何连接MySQL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAfhnu67-1641383478895)(SQL.assets/image-20211119111613949.png)]

MySQL的软件架构

MySQL是一个C/S架构的产品,我们之前安装的Navicat仅仅只是一个客户端,服务端是我们之前安装的MySQL5.7

目前市面上有两种软件形态。B/S | C/S

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56hHjdLf-1641383478897)(SQL.assets/image-20211119113950608.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LypZB2XO-1641383478898)(SQL.assets/image-20211119113958247.png)]

3. SQL

如何使用呢?其实就是去学习SQL标准语法来操作数据库。

SQL是由一堆关键字组成的语句,一般来说不会太长。这个语句里面有一些关键字,也有一些用户起的名字。

关键字是不区分大小写的,用户起的名字规范是都使用小写。SQL关键字不多,大概20多个。

每一个SQL语句都要以分号结尾。

3.1 MySQL的存储结构

每一个MySQL的服务里面,有很多库,库里面有很多表,表里面有很多数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1ZlTPre-1641383478899)(SQL.assets/image-20211119114438714.png)]

3.2 库

字符集和校对规则。

字符集:其实就是一套符号和编码。utf8,gbk,Latin1(不支持中文),utf8mb4(对UTF8的一个拓展)

校对规则:其实就是一套用来比较字符集内字符大小的规则。utf8_bin(区分大小写),utf8_general_ci(不区分大小写)

所以,大家在去新建库、新建表的时候一定要指定对应的字符集。

create database dbName character set utf8 collate utf8_bin;
drop database [if exists] dbName;
-- 修改库的名字(不支持)
-- 修改库的字符集
alter database 36th character set gbk collate gbk_bin;
-- 查询库
-- 查询所有的库
show databases;

-- 查询库的建库语句  可以帮助我们查看库的字符集和校对规则
show create database 36th;

3.3 表

-- 整型
create table t_int (
	t1 TINYINT,
	t2 smallint,
	t3 MEDIUMINT,
	t4 int,
	t5 bigint
)character set utf8;

-- 浮点型 float double bigDecimal
create table t_f (
	t1 float(4,2),
	t2 double(6,2),
	t3 decimal(8,2)
)character set utf8 collate utf8_bin;

create table t_date(
	t1 year,
	t2 date,
	t3 time,
	t4 datetime,
	t5 timestamp
)character set utf8 collate utf8_bin;
-- datetime 和timestamp有什么区别呢? 国际化
-- 1. datetime 占用8个直接 timestamp占用4个直接
-- 2. timestamp默认时间是当前时间,datetime默认是null
-- 3. timestamp 跟着mysql的时间走,而datetime跟着系统的时间走

set time_zone = '+8:00';

--字符串类型
create table t_str(
	t1 char(5),
	t2 varchar(20),
	t3 text
)character set utf8 collate utf8_bin;

-- 枚举类型
create table t_enum(
 t1 enum('first','second','third'),
 t2 varchar(20)
)character set utf8 collate utf8_bin;

-- 集合类型
create table t_set(
	 t1 set("bob","tom","jerry")
)character set utf8 collate utf8_bin;
-- 练习
create table employee(
	id int,
    name varchar(20),
    gender enum('男','女'),
    birthday date,
    entry_date date,
    job varchar(20),
    salary double(10,2),
    resume text
)character set utf8 collate utf8_bin;
drop table [if exists] t_set;
-- 改
-- 修改表名
rename table employee to user;
-- 修改表的字符集
alter table user character set utf8 collate utf8_bin;

-- 修改列
-- 增加列 add 
alter table user add height int;

-- 删除列 drop
alter table user drop height;

-- 修改列的名字 change
alter table user change id uid double(4,2);
-- 修改列的类型 change modify
alter table user modify uid int;
-- 查表的建表语句
show create table user;
-- 查询所有的表
show tables;
-- 查表的结构
describe tableName;
desc tableName;

3.4 数据

-- 增
-- 插入单个值
insert into user1 values (1,"天明","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈');
-- values 和value目前来说没有区别,大家以后在使用的过程中推荐使用values
-- 插入多个值
insert into user1 values
(3,"云天明2号","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈'),
(2,"长风","男",'2000-10-19','2015-10-11','讲师',20000.00,'王道最会单手打方向盘的男人');

insert into user1 values 
(1001,'李云龙',null,null,null,"",null,null);

-- 插入指定列的值
insert into user1 (uid,name) values (1002,'楚云飞');
-- 删除
delete from user1;

-- 删除指定的数据 where
-- where是对表中的记录去过滤,筛选出符合条件的行(记录)
delete from user1 where uid = 1;
delete from user1 where name = '楚云飞';
delete from user1 where uid > 2;

-- 修改
-- 修改单列
update user1 set name = '短风'; 
update user1 set name = '长风' where uid = 1;

-- 修改
-- 修改单列
update user1 set name = '短风'; 
update user1 set name = '长风' where uid = 1;

-- 修改多列
update user1 set job = '总经理',resume='最大方的总经理'  where uid = 1;
-- select 关键字其他的功能
select now();
select 199*258;
select trim("  abcd ed  ");
select concat("天明","程心");


CREATE TABLE t_students(
	id        INT       PRIMARY KEY    AUTO_INCREMENT,
	name      CHAR(20)  NOT NULL,
	class     CHAR(10)  NOT NULL,
	chinese   FLOAT,
	english   FLOAT,
	math      FLOAT
)character set utf8;

INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('东邪', '一班', 90, 90, 90);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('西毒', '二班', 80, 80, 90);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('南帝', '三班', 80, 90, 80);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('北丐', '四班', 60, 60, 60);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('中神通', '五班', 100, 100, 100);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('郭靖', '一班', 59, 59, 59);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('黄蓉', '一班', 90, 90, 90);


-- 查询
-- 查询表 t_students 中学生的姓名
select name from t_students;

-- 查询多列
select id,name,class from t_students;

-- 查询所有的列
select id,name,class,english,math,chinese from t_students;
select * from t_students;

3.5 where

where关键字可以帮助我们去过滤数据,过滤出符合条件的指定的行。

where [布尔表达式],这个布尔表达式的值是一个boolean类型的

= != <> > < >= <=
-- 使用where条件语句去过滤
select * from t_students where id = 1;

select * from t_students where class = '一班';

-- 1. 查询语数外总成绩大于 180 的同学信息
select * from t_students where (chinese + english + math) > 180;

-- 2. 查询数学成绩在[80,90]区间的同学姓名;
-- 1 2 3 7
select * from t_students where math >= 80 and math <= 90;

-- 3. 查询各科都及格的同学姓名;
select name from t_students where chinese >= 60 and math >= 60 and english >= 60;


-- 5. 查询id不等于1的同学的信息
select * from t_students where id != 1;
select * from t_students where id <> 1;
关键字
  • or and

    可以用来拼接条件

    -- or and
    -- 4. 查询一班和二班的同学信息;
    select * from t_students where class = '一班' or class = '二班';
    
  • is null | is not null

    -- is null
    select * from user1;
    -- 查询Job为空的用户信息
    select * from user1 where job = "";
    -- is not null
    select * from user1 where job is not null;
    
  • between and | not between and

    -- between and 表示查询一个范围区间(闭区间)的成员
    -- 2. 查询数学成绩在[80,90]区间的同学姓名;
    select * from t_students where math between 80 and 90;
    
    select * from t_students where math not between 80 and 90;
    
  • in | not in

    -- in 查询在一个指定范围内的成员
    select * from t_students;
    
    select * from t_students where id in (1,2,3,4,1001);
    
    select * from t_students where id = 1 or id = 2 or id = 3 or id = 4 or id = 1001;
    
    -- 4. 查询一班和二班的同学信息
    select * from t_students where class in ('一班','二班');
    
    -- not in 
    -- 查询不是一班和二班的同学信息
    select * from t_students where class not in ('一班','二班');
    
  • like | not like

    -- like
    -- 模糊查询 
    -- % 表示通配
    -- _表示占位
    select * from t_students;
    
    select * from t_students where name like "%黄%";
    
    select * from t_students where name like "黄%";
    
    select * from t_students where name like "黄_";
    
    -- 例如百度这样的搜索引擎,不是使用模糊查询来查的,为什么呢?因为效率太低了
    -- ES lucense Solr
    
    -- not like
    select * from t_students where name not like "黄%";
    

3.6 其他的关键字

3.6.1 distinct

这个关键字是用来去重的

-- 查询 t_students 表中的不同班级名
select distinct(class) from t_students;

需要注意的是,只有两行数据完全一致的时候才会去重,假如不一致,就不会去重

select distinct(class),name from t_students;
-- 只有当我们需要的class 和name两个都完全一样的时候,才会去重
3.6.2 limit

限制结果集,其实就是可以帮助我们把查询出来的指定条数的记录显示出来。

-- 查询 t_students 表中第3到第5条记录;
select * from t_students limit 2,3;

-- 查询前三条记录
select * from t_students limit 3;

limit关键字的作用:

在我们后续进行分页的时候有用。

假如我们查询的页码叫做 page_no,然后一页有 page_size 条记录

limit (page_no-1)*page_size,page_size

3.6.3 order

对结果进行排序

  • 升序:默认值,ASC
  • 降序:DESC
-- 对单列进行排序
select * from t_students order by chinese asc;
select * from t_students order by chinese desc;

select * from t_students order by chinese desc limit 1;


-- 对多列进行排序
-- 按照语文成绩从高到低排序,如果语文成绩一样,按照数学成绩,从高到低排序
select * from t_students order by chinese desc,math asc;

-- 如:对数学单科成绩从低到高进行排序。
select * from t_students order by math asc;
-- 如:对语文降序,数学升序,外语降序排序。
select * from t_students order by chinese desc,math asc,english desc;
-- 查询总成绩前三名同学的信息。
select * from t_students order by (chinese+math+english) desc limit 3;
3.6.4 计算字段
-- 查询总成绩信息
select name,chinese+english+math from t_students;

注意:计算字段是对行内的数据进行加减,不能对一列的数据进行加减

3.6.5 AS

我们可以通过as关键字来起别名, as关键字可以省略,不建议省略,省略了之后SQL的可读性会变差。

  • 对列起别名

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HoJMb1n-1641383478900)(SQL.assets/image-20211120162530884.png)]

  • 对表起别名

    这个一般是在我们后续学习的多表查询中有用。

    select * from 
    (select name as '名字',chinese+english+math as '总成绩' from t_students) as user;
    
3.6.6 group by

我们可以对查询的结果进行分组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dTJtNViB-1641383478901)(SQL.assets/image-20211120170404835.png)]

select class,group_concat(id),group_concat(name) from student group by class;

having:对分组之后的结果进行过滤。

-- 对于分组之后的结果过滤,我们要使用having关键字
-- 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count  from student group by class having count > 2;
3.6.7 聚合函数
  • max

    求最大值

    -- max
    select max(score) from student;
    
    -- 求各个班级的最高分
    select class,max(score) from student group by class;
    
    
  • min

    求最小值

    -- min
    select min(score) from student;
    -- 求各个班级的最低分
    select class,min(score) from student group by class;
    
  • sum

    求和

    -- sum 求和
    select sum(score) from student;
    -- 各个班级的总分
    select class,sum(score) from student GROUP BY class;
    
  • count

    计数

    -- 计数 count
    select count(*) from student;
    
    -- 求各个班级有多少个学生
    select count(*),class from student group by class;
    
  • avg

    求平均值

    -- avg 平均值
    select avg(score) from student;
    -- 求各个班级的平均分
    select class,avg(score) from student group by class;
    

3.7 SQL语句的执行顺序

(5) SELECT column_name, ... 
(1) FROM table_name, ...
(2) [WHERE ...] 
(3) [GROUP BY ...] 
(4) [HAVING ...] 
(6) [ORDER BY ...]
(7) [limit...];

说明:关键字的顺序是不能够改变的,如果改变了之后,会有语法错误。

上课SQL

-- 库
-- 增
create database 36th;

create database 36th character set utf8 collate utf8_bin;

-- 查询库
-- 查询所有的库
show databases;

-- 查询库的建库语句  可以帮助我们查看库的字符集和校对规则
show create database 36th;

-- 删除
drop database 28_jdbc;
drop database 28_sql4;

drop database if EXISTS 28_sql5;


-- 修改库的名字(不支持)
-- 修改库的字符集
alter database 36th character set utf8 collate utf8_bin;



-- 表
-- 选中数据库
use 36th;

-- 增
create table province (
	id int,
	name String,
)

-- 整型
create table t_int (
	t1 TINYINT,
	t2 smallint,
	t3 MEDIUMINT,
	t4 int,
	t5 bigint
)character set utf8;

-- 浮点型 float double bigDecimal
create table t_f (
	t1 float(4,2),
	t2 double(6,2),
	t3 decimal(8,2)
)character set utf8 collate utf8_bin;

create table t_date(
	t1 year,
	t2 date,
	t3 time,
	t4 datetime,
	t5 timestamp
)character set utf8 collate utf8_bin;
-- datetime 和timestamp有什么区别呢? 国际化
-- 1. datetime 占用8个直接 timestamp占用4个直接
-- 2. timestamp默认时间是当前时间,datetime默认是null
-- 3. timestamp 跟着mysql的时间走,而datetime跟着系统的时间走

set time_zone = '+8:00';

--字符串类型
create table t_str(
	t1 char(5),
	t2 varchar(20),
	t3 text
)character set utf8 collate utf8_bin;

-- 枚举类型
create table t_enum(
 t1 enum('first','second','third'),
 t2 varchar(20)
)character set utf8 collate utf8_bin;

-- 集合类型
create table t_set(
	 t1 set("bob","tom","jerry")
)character set utf8 collate utf8_bin;









insert into t_date values (now(),now(),now(),now(),now());

create table employee(
	id int,
    name varchar(20),
    gender enum('男','女'),
    birthday date,
    entry_date date,
    job varchar(20),
    salary double(10,2),
    resume text
)character set utf8 collate utf8_bin;


-- 删
drop table if exists t_set;

-- 改
-- 修改表名
rename table employee to user;
-- 修改表的字符集
alter table user character set utf8 collate utf8_bin;

-- 修改列
-- 增加列 add 
alter table user add height int;

-- 删除列 drop
alter table user drop height;

-- 修改列的名字 change
alter table user change id uid double(4,2);
-- 修改列的类型 change modify
alter table user modify uid int;

-- 查
-- 查表的建表语句
show create table user;
-- 查询所有的表
show tables;

use 36th;

alter table user add image varchar(255);

alter table user modify job varchar(60);

alter table user drop image;

rename table user to user1;

alter table user1 character set gbk;

-- 数据
-- 增
-- 插入单个值
insert into user1 values (1,"天明","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈');
-- values 和value目前来说没有区别,大家以后在使用的过程中推荐使用values
-- 插入多个值
insert into user1 values
(3,"云天明2号","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈'),
(2,"长风","男",'2000-10-19','2015-10-11','讲师',20000.00,'王道最会单手打方向盘的男人');

insert into user1 values 
(1001,'李云龙',null,null,null,"",null,null);

-- 插入指定列的值
insert into user1 (uid,name) values (1002,'楚云飞');

-- 删除
delete from user1;

-- 删除指定的数据 where
-- where是对表中的记录去过滤,筛选出符合条件的行(记录)
delete from user1 where uid = 1;
delete from user1 where name = '楚云飞';
delete from user1 where uid > 2;

-- 修改
-- 修改单列
update user1 set name = '短风'; 
update user1 set name = '长风' where uid = 1;

-- 修改多列
update user1 set job = '总经理',resume='最大方的总经理'  where uid = 1;


-- select 关键字其他的功能
select now();
select 199*258;
select trim("  abcd ed  ");
select concat("天明","程心");


CREATE TABLE t_students(
	id        INT       PRIMARY KEY    AUTO_INCREMENT,
	name      CHAR(20)  NOT NULL,
	class     CHAR(10)  NOT NULL,
	chinese   FLOAT,
	english   FLOAT,
	math      FLOAT
)character set utf8;

INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('东邪', '一班', 90, 90, 90);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('西毒', '二班', 80, 80, 90);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('南帝', '三班', 80, 90, 80);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('北丐', '四班', 60, 60, 60);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('中神通', '五班', 100, 100, 100);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('郭靖', '一班', 59, 59, 59);
INSERT INTO t_students (name, class, chinese, english, math) 
VALUES ('黄蓉', '一班', 90, 90, 90);
-- 查询
-- 查询表 t_students 中学生的姓名
select name from t_students;

-- 查询多列
select id,name,class from t_students;

-- 查询所有的列
select id,name,class,english,math,chinese from t_students;
select * from t_students;

-- 使用where条件语句去过滤
select * from t_students where id = 1;

select * from t_students where class = '一班';

-- 1. 查询语数外总成绩大于 180 的同学信息
select * from t_students where (chinese + english + math) > 180;

-- 2. 查询数学成绩在[80,90]区间的同学姓名;
-- 1 2 3 7
select * from t_students where math >= 80 and math <= 90;

-- 3. 查询各科都及格的同学姓名;
select name from t_students where chinese >= 60 and math >= 60 and english >= 60;

-- 4. 查询一班和二班的同学信息;
select * from t_students where class = '一班' or class = '二班';

-- 5. 查询id不等于1的同学的信息
select * from t_students where id != 1;
select * from t_students where id <> 1;

-- 常见的关键字 
-- is null
select * from user1;
-- 查询Job为空的用户信息
select * from user1 where job = "";
-- is not null
select * from user1 where job is not null;

-- between and 表示查询一个范围区间(闭区间)的成员
-- 2. 查询数学成绩在[80,90]区间的同学姓名;
select * from t_students where math between 80 and 90;

select * from t_students where math not between 80 and 90;

-- in 查询在一个指定范围内的成员
select * from t_students;

select * from t_students where id in (1,2,3,4,1001);

select * from t_students where id = 1 or id = 2 or id = 3 or id = 4 or id = 1001;

-- 4. 查询一班和二班的同学信息
select * from t_students where class in ('一班','二班');

-- not in 
-- 查询不是一班和二班的同学信息
select * from t_students where class not in ('一班','二班');


-- like
-- 模糊查询 
-- % 表示通配
-- _表示占位
select * from t_students;

select * from t_students where name like "%黄%";

select * from t_students where name like "黄%";

select * from t_students where name like "黄_";

-- 例如百度这样的搜索引擎,不是使用模糊查询来查的,为什么呢?因为效率太低了
-- ES lucense Solr

-- not like
select * from t_students where name not like "黄%";

-- 查询 t_students 表中的不同班级名
select distinct(class) from t_students;

select distinct(class),name from t_students;

-- 查询 t_students 表中第3到第5条记录;
select * from t_students limit 2,3;

-- 查询前三条记录
select * from t_students limit 3;

-- 对单列进行排序
select * from t_students order by chinese asc;
select * from t_students order by chinese desc;

select * from t_students order by chinese desc limit 1;


-- 对多列进行排序
-- 按照语文成绩从高到低排序,如果语文成绩一样,按照数学成绩,从高到低排序
select * from t_students order by chinese desc,math asc;

-- 如:对数学单科成绩从低到高进行排序。
select * from t_students order by math asc;
-- 如:对语文降序,数学升序,外语降序排序。
select * from t_students order by chinese desc,math asc,english desc;
-- 查询总成绩前三名同学的信息。
select * from t_students order by (chinese+math+english) desc limit 3;


-- 查询总成绩信息
select * from t_students;
select name,chinese+english+math from t_students;

select * from 
(select name as '名字',chinese+english+math as '总成绩' from t_students) as user;


select name  '名字',chinese+english+math  '总成绩' from t_students;

create table student (
	id int,
	name varchar(20),
	class varchar(10)
)character set utf8;

insert into student values (1,"刘备",'一班');
insert into student values (2,"关羽",'一班');
insert into student values (3,"张飞",'一班');

insert into student values (4,"大乔",'二班');
insert into student values (5,"小乔",'二班');
insert into student values (6,"孙尚香",'二班');

insert into student values (7,"曹操",'三班');
insert into student values (8,"曹丕",'三班');
insert into student values (9,"荀彧",'三班');

select * from student;


select class,group_concat(id),group_concat(name) from student group by class;


alter table student add score int;


-- max
select max(score) from student;

-- 求各个班级的最高分
select class,max(score) from student group by class;


-- min
select min(score) from student;
-- 求各个班级的最低分
select class,min(score) from student group by class;

-- sum 求和
select sum(score) from student;
-- 各个班级的总分
select class,sum(score) from student GROUP BY class;

-- 计数 count
select count(*) from student;

-- 求各个班级有多少个学生
select count(*),class from student group by class;

-- avg 平均值
select avg(score) from student;
-- 求各个班级的平均分
select class,avg(score) from student group by class;


select * from student;

select class,count(*) from student group by class;

-- 对于分组之后的结果过滤,我们要使用having关键字
-- 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count  from student group by class having count > 2;

select * from t_students;
-- 查询每个同学的总成绩,平均成绩,并用别名表示;
select name,(chinese+english+math) as '总成绩',(chinese+english+math)/3 as '平均成绩' from t_students;


-- 查询数学最大值,并用别名表示;
select max(math) as '数学最高分' from t_students;

-- 查询外语最小值,并用别名表示;
select min(english) as '英语最低分' from t_students;
-- 查询全体学生的语数外各科平均成绩,并用别名表示
select avg(chinese) as '语文平均分',avg(math) as '数学平均分',avg(english) as '英语平均分' from t_students;

补充 枚举类型

public enum  OrderStatus {
    
	// 枚举类型不可以创建实例对象
    // 定义好枚举类型的实例对象
    
    NOT_PAYED(1,"未支付"),
    PAYED(2,"已支付"),
    CANCEL(3,"取消")
    ;

    int id;
    String desc;

    OrderStatus(int id, String desc) {
        this.id = id;
        this.desc = desc;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

的结果过滤,我们要使用having关键字
– 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count from student group by class having count > 2;

select * from t_students;
– 查询每个同学的总成绩,平均成绩,并用别名表示;
select name,(chinese+english+math) as ‘总成绩’,(chinese+english+math)/3 as ‘平均成绩’ from t_students;

– 查询数学最大值,并用别名表示;
select max(math) as ‘数学最高分’ from t_students;

– 查询外语最小值,并用别名表示;
select min(english) as ‘英语最低分’ from t_students;
– 查询全体学生的语数外各科平均成绩,并用别名表示
select avg(chinese) as ‘语文平均分’,avg(math) as ‘数学平均分’,avg(english) as ‘英语平均分’ from t_students;




## 补充 枚举类型

```java
public enum  OrderStatus {
    
	// 枚举类型不可以创建实例对象
    // 定义好枚举类型的实例对象
    
    NOT_PAYED(1,"未支付"),
    PAYED(2,"已支付"),
    CANCEL(3,"取消")
    ;

    int id;
    String desc;

    OrderStatus(int id, String desc) {
        this.id = id;
        this.desc = desc;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sql SQL全称是“结构化查询语言(Structured Query Language)”,最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言,得到了广泛的应用。如今无论是像Oracle ,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像Visual Foxporo,PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。 SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。他不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操纵对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的一个单独事件只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。 SQL同时也是数据库文件格式的扩展名。 SQL语言包含4个部分: 数据查询语言(SELECT“查询”语句) 数据操纵语言(INSERT"插入”, UPDATE“修正.更新”, DELETE“删除”语句) 数据定义语言(如CREATE"建立", DROP等语句) DROP TABLE "删除资料表定义以及所有的资料、索引、触发程序、条件约束以及资料表的权限" 数据控制语言(如COMMIT"提交”, ROLLBACK"重新运行"等语句)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值