mysql基本查询使用

/**

DDL:操作数据库

**/ -- 查询所有数据库
SHOW DATABASES;-- 创建数据库
CREATE DATABASE stu;-- 创建数据库的第二种方式:先判断数据库是否存在,存在就创建
CREATE DATABASE
IF
	NOT EXISTS stu2;-- 删除数据库
DROP DATABASE stu;-- 删除数据库的第二种方式:先判断数据库是否存在,存在就删除
DROP DATABASE
IF
	EXISTS stu2;-- 使用数据
USE del;-- 查看当前使用的数据库
SELECT DATABASE
	();
/**

DDL:操作表

**/-- 查询表
SHOW TABLES;-- 查询表结构
DESC onetable;-- 创建表
CREATE TABLE twotable ( id INT, NAME VARCHAR ( 20 ), PASSWORD VARCHAR ( 32 ) ) -- 创建表的练习
/**
需求:设计一张学生表,请注重数据类型、长度的合理性
    1. 编号
    2. 姓名,姓名最长不超过10个汉字
    3. 性别,因为取值只有两种可能,因此最多一个汉字
    4. 生日,取值为年月日
    5. 入学成绩,小数点后保留两位
    6. 邮件地址,最大长度不超过 64
    7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
    8. 学生状态(用数字表示,正常、休学、毕业...
*/
CREATE TABLE threetable (
	id INT,-- 编号
	NAME VARCHAR ( 20 ),-- 姓名
	gender CHAR ( 1 ),-- 性别
	birthday date,-- 生日
	score DOUBLE ( 5, 2 ),-- 入学成绩
	email VARCHAR ( 64 ),-- 电子邮件
	tel VARCHAR ( 15 ),-- 家庭联系方式
	STATUS TINYINT -- 学生状态
	
) -- 删除表
DROP TABLE onetable;-- 删除表的第二种方式:先判断数据库是否存在,存在就删除
DROP TABLE
IF
	EXISTS twotable;-- 修改表名
ALTER TABLE threetable RENAME TO onetable -- 添加一列  也就是新增一个字段
ALTER TABLE onetable ADD address VARCHAR ( 50 );-- 给 onetable 表新增一个字段:address  这个字段类型是 varchar(50)
-- 修改一列  也就是修改一个字段的类型
ALTER TABLE onetable MODIFY address CHAR ( 50 );-- 给 onetable 表修改一个字段:address  这个字段的类型修改成 char(50)
-- 修改字段的名称和类型  也就是字段名和类型都修改
ALTER TABLE onetable CHANGE address addr VARCHAR ( 50 );-- 把 onetable 表中的 address字段修改成 addr,并且把类型修改成 varchar(50)
-- 删除某一个字段
ALTER TABLE onetable DROP addr;
/**

DML:对表中的数据进行 增删改查

**/-- 查询所有数据
SELECT
	* 
FROM
	onetable;-- 给指定的表添加数据
INSERT INTO onetable
VALUES
	( 1, "测试1号", '男', '2000-09-15', 83.24, '[email protected]', '15245236523', 1 );-- 第二种添加数据方式:给指定的列添加数据
INSERT INTO onetable ( id, NAME )
VALUES
	( 2, "测试2号" );
INSERT INTO onetable ( id, NAME )
VALUES
	( 8, "测试8号" );-- 批量添加数据
INSERT INTO onetable
VALUES
	( 3, "测试3号", '男', '2000-09-15', 83.24, '[email protected]', '15245236523', 2 ),(
		4,
		"测试4号",
		'男',
		'2000-09-15',
		83.24,
		'[email protected]',
		'15245236523',
		1 
	);-- 修改某一条数据
UPDATE onetable 
SET gender = '女',
birthday = '1999-09-15' 
WHERE
	id = 2;-- 删除某条数据
DELETE 
FROM
	onetable 
WHERE
	id = 8;
/**

DQL:对表中的数据进行 查询

**/-- 先准备一些数据,方便进行查询演示
-- 删除stu表
DROP TABLE
IF
	EXISTS stu;-- 创建stu表
CREATE TABLE stu (
	id INT,-- 编号
	NAME VARCHAR ( 20 ),-- 姓名
	age INT,-- 年龄
	sex VARCHAR ( 5 ),-- 性别
	address VARCHAR ( 100 ),-- 地址
	math DOUBLE ( 5, 2 ),-- 数学成绩
	english DOUBLE ( 5, 2 ),-- 英语成绩
	hire_date date -- 入学时间
	
);-- 添加数据
INSERT INTO stu ( id, NAME, age, sex, address, math, english, hire_date )
VALUES
	( 1, '马运', 55, '男', '杭州', 66, 78, '1995-09-01' ),
	( 2, '马花疼', 45, '女', '深圳', 98, 87, '1998-09-01' ),
	( 3, '马斯克', 55, '男', '香港', 56, 77, '1999-09-02' ),
	( 4, '柳白', 20, '女', '湖南', 76, 65, '1997-09-05' ),
	( 5, '柳青', 20, '男', '湖南', 86, NULL, '1998-09-01' ),
	( 6, '刘德花', 57, '男', '香港', 99, 99, '1998-09-01' ),
	( 7, '张学右', 22, '女', '香港', 99, 99, '1998-09-01' ),
	( 8, '德玛西亚', 18, '男', '南京', 56, 65, '1994-09-02' );-- 基础查询   查询所有字段
SELECT
	* 
FROM
	stu;-- 基础查询   查询指定的字段
SELECT NAME
	,
	sex 
FROM
	stu;-- 去除重复的记录
SELECT DISTINCT
	sex 
FROM
	stu;-- 基础查询练习:查询姓名、数学成绩、英语成绩,并且通过 as 给math和english起备用名
SELECT NAME
	,
	math AS '数学成绩',
	english AS '英语成绩' 
FROM
	stu;-- 条件查询
SELECT NAME
	,
	math AS '数学成绩' 
FROM
	stu 
WHERE
	sex = '男';-- 条件查询练习:查询年龄大于20
SELECT
	* 
FROM
	stu 
WHERE
	age > 20;-- 条件查询练习:查询年龄大于等于20
SELECT
	* 
FROM
	stu 
WHERE
	age >= 20;-- 条件查询练习:查询年龄大于20并且小于30
SELECT
	* 
FROM
	stu 
WHERE
	age > 20 && age < 30; SELECT * FROM stu WHERE age > 20 
AND age < 30;
SELECT
	* 
FROM
	stu 
WHERE
	age BETWEEN 20 adn 30;-- 条件查询练习:查询入学日期在 1998-09-011999-09-01
SELECT
	* 
FROM
	stu 
WHERE
	hire_date BETWEEN '1998-09-01' adn '1999-09-01';-- 条件查询练习:查询年龄不等于18
SELECT
	* 
FROM
	stu 
WHERE
	age != 18;
SELECT
	* 
FROM
	stu 
WHERE
	age <> 18;-- 条件查询练习:查询年龄等于18 或者 等于20 或者 等于22
SELECT
	* 
FROM
	stu 
WHERE
	age = 18 
	OR age = 20 
	OR age = 22;
SELECT
	* 
FROM
	stu 
WHERE
	age IN ( 18, 20, 22 );-- 条件查询练习:查询英语成绩为null
SELECT
	* 
FROM
	stu 
WHERE
	english IS NULL;
SELECT
	* 
FROM
	stu 
WHERE
	english IS NOT NULL;-- 英语成绩不等于 null
-- 模糊查询练习
/*
 模糊查询使用 like 作为关键字
 _:代表单个任意字符
 %:代表任意个数字符

**/-- 模糊查询练习:查询 姓‘马’的信息
SELECT
	* 
FROM
	stu 
WHERE
	NAME LIKE '马%' -- 模糊查询练习:查询第二个字是‘花’的信息
SELECT
	* 
FROM
	stu 
WHERE
	NAME LIKE '_花%' -- 模糊查询练习:查询名字中包含‘德’的信息
SELECT
	* 
FROM
	stu 
WHERE
	NAME LIKE '%德%' -- 排序查询
/**
 ASC:升序排序
 DESC:降序排序
*/-- 排序查询练习:查询学生信息,按照年龄升序排序
SELECT
	* 
FROM
	stu 
ORDER BY
	age;-- 排序查询练习:查询学生信息,按照数学成绩降序排序
SELECT
	* 
FROM
	stu 
ORDER BY
	math DESC;-- 排序查询练习:查询学生信息,按照数学成绩排序,如果数学成绩一样,在按照英语成绩升序排序
SELECT
	* 
FROM
	stu 
ORDER BY
	math DESC,
	english ASC;-- 聚合函数
/**
count  统计数量
max    最大值
min    最小值
sum    求和
avg    平均值
**/-- 聚合函数练习:统计班级一共多少学生
SELECT
	count(*) 
FROM
	stu;-- 聚合函数练习:查询数学最高分
SELECT
	max( math ) 
FROM
	stu;-- 聚合函数练习:查询数学最低分
SELECT
	min( math ) 
FROM
	stu;-- 聚合函数练习:查询数学平均分
SELECT
	avg( math ) 
FROM
	stu;-- 聚合函数练习:查询数学总分
SELECT
	sum( math ) 
FROM
	stu;-- 分组查询
/**
语法:
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
**/-- 分组查询练习:查询男生和女生各自的平均分
SELECT
	sex,
	avg( math ) 
FROM
	stu 
GROUP BY
	sex;-- 分组查询练习:查询男生和女生各自的平均分已经各自人数
SELECT
	sex,
	avg( math ),
	count(*) 
FROM
	stu 
GROUP BY
	sex;-- 分组查询练习:查询男生和女生各自的平均分已经各自人数,要求:低于70分的不参与分组
SELECT
	sex,
	avg( math ),
	count(*) 
FROM
	stu 
WHERE
	math > 70 
GROUP BY
	sex;-- 分组查询练习:查询男生和女生各自的平均分已经各自人数,要求:低于70分的不参与分组,分组后人数大于2个的
SELECT
	sex,
	avg( math ),
	count(*) 
FROM
	stu 
WHERE
	math > 70 
GROUP BY
	sex 
HAVING
	count(*) > 2;-- 分页查询
/**
语法:
SELECT 字段列表 FROM 表名 LIMINT 起始索引,查询条数

起始索引 = (当前页码 - 1)* 每页显示的条数
**/-- 分页查询练习,查询3条数据
SELECT
	* 
FROM
	stu 
	LIMIT 0,
	3;-- 分页查询练习,每页显示2条,查询第一页的数据
SELECT
	* 
FROM
	stu 
	LIMIT 0,
	2;-- 分页查询练习,每页显示2条,查询第二页的数据
SELECT
	* 
FROM
	stu 
	LIMIT 2,
	2;-- 分页查询练习,每页显示2条,查询第三页的数据
SELECT
	* 
FROM
	stu 
	LIMIT 4,
	2;
/***
	多表查询

	**/
DROP TABLE
IF
	EXISTS emp;
DROP TABLE
IF
	EXISTS dept;
​
​ # 创建部门表
CREATE TABLE dept ( did INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR ( 20 ) );
​ # 创建员工表
CREATE TABLE emp (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR ( 10 ),
	gender CHAR ( 1 ),-- 性别
	salary DOUBLE,-- 工资
	join_date DATE,-- 入职日期
	dep_id INT,
	FOREIGN KEY ( dep_id ) REFERENCES dept ( did ) -- 外键,关联部门表(部门表的主键)
	
);-- 添加部门数据
INSERT INTO dept ( dNAME )
VALUES
	( '研发部' ),(
		'市场部' 
		),(
		'财务部' 
		),(
		'销售部' 
	);-- 添加员工数据
INSERT INTO emp ( NAME, gender, salary, join_date, dep_id )
VALUES
	( '孙悟空', '男', 7200, '2013-02-24', 1 ),
	( '猪八戒', '男', 3600, '2010-12-02', 2 ),
	( '唐僧', '男', 9000, '2008-08-08', 2 ),
	( '白骨精', '女', 5000, '2015-10-07', 3 ),
	( '蜘蛛精', '女', 4500, '2011-03-14', 1 ),
	( '小白龙', '男', 2500, '2011-02-14', NULL );
-- 多表查询练习
select * from emp,dept where dept.did=emp.dep_id;
-- 多表查询之 内连接查询
/**
语法:
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2.。。 WHERE 条件
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON条件
**/
-- 隐式内连接
select * from dept,emp where dept.did=emp.dep_id;
select t1.NAME,t1.gender,t2.dname from dept t2,emp t1 where t2.did=t1.dep_id;
-- 显示内连接
select * from emp inner join dept on emp.dep_id = dept.did;
-- 多表查询之 外连接查询
/**
语法:
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件
**/
-- 左外连接
select * from emp left join dept on emp.dep_id = dept.did;
-- 右外连接
select * from emp right join dept on emp.dep_id = dept.did;
-- 多表查询之 子查询
select * from emp where salary > (select salary from emp where name = '猪八戒');


自己的

> MySQL卸载:https://www.bilibili.com/video/BV1AG4y1B7sW/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=ebff660a6ef0a6cd2d5ffbfcf97a5312

> MySQL安装:https://www.bilibili.com/video/BV1Kr4y1i7ru?spm_id_from=333.788.videopod.episodes&vd_source=ebff660a6ef0a6cd2d5ffbfcf97a5312&p=3




# DDL

> 用来定义数据库对象:数据库、表、列等

## 1.1查询数据库

> show databases;

## 1.2创建数据库

> + 创建数据库
>
>   > create database 数据库名称;
>
> + 创建数据库(判断,如果不存在就创建)
>
>   > create database if not exists 数据库名称;

## 1.3删除数据库

> + 删除数据库
>
>   > drop database 数据库名称;
>
> + 删除数据库(判断,如果存在就删除)
>
>   > drop database if exists 数据库名称;

## 1.4使用数据库

> + 查看当前使用的数据库
>
>   > select database();
>
> + 使用数据库
>
>   > use 数据库名称;

## 2.1查询表结构

+ 查询当前数据库下所有表名称

  > show tables;

+ 查询表结构

  >  desc 表名称;

## 2.2创建表

```sql
create table cesione(
    id int,
    name varchar(30),
    password varchar(12)
);
# 注意:最后一行不能加逗号

3.1修改表

  • 修改表名

    alter table 表名 rename to 新表名;

  • 添加一列

    alter table 表名  add 列名 数据类型;

  • 修改数据类型

    alter table 表名 modify 列名 数据类型;

  • 修改列名和数据类型

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

  • 删除列

    alter table 表名 drop 列名;

4 DDL系列数据库代码

# 查询数据库 show databases;
SHOW DATABASES;
# 创建数据库  create database 数据库名称;
CREATE DATABASE de1;
# 创建数据库(判断,如果不存在就创建) create database if not exists 数据库名称;
CREATE DATABASE IF NOT EXISTS 数据库名称;
# 删除数据库 drop database 数据库名称
DROP DATABASE 数据库名称;
# 删除数据库,判断数据库是否存在,存在就删除
DROP DATABASE IF EXISTS del;
# 查看使用的数据库
SELECT DATABASE();
# 使用某个数据库
USE de1;
#查询当前使用数据库下所有表名称
SHOW TABLES;
# 查询表结构
DESC newCeSi_table;
DESC onetable;
# 创建表   注意:表字段最后一位不能加逗号
CREATE TABLE onetable ( 
		id INT, 
		NAME VARCHAR ( 30 ),
		PASSWORD VARCHAR ( 12 )
);
# 修改表名
alter table cesione rename to newCeSi_table;
# 添加一列
alter table onetable add likes varchar(30);
alter table onetable add chengji varchar(30);
# 修改数据类型
alter table onetable modify chengji int;
# 修改列名和数据类型
alter table onetable change PASSWORD password varchar(30);
# 删除某一列
alter table onetable drop chengji;

DML

用来对数据库中的数据进行增删改

1.1查询表数据

--查询所有数据
select * from onetable;

1.2给表增加数据

--给指定列提那就数据
insert into onetable(id,NAME) values(1,'清');
--给全部列添加数据
insert into onetable values(2,'嘿','131313');
--批量添加数据
insert into onetable values(3,'黑龙1','1111'),(3,'黑龙2','2222'),(3,'黑龙3','3333');
insert into onetanle(id,NAME,PASSWORD) values(4,'黑龙4','4444'),(5,'黑龙5','55555'),(6,'黑龙6','6666');

1.3修改表中的数据

--修改数据
update onetable set PASSWORD='55555' where name='清'&&id=1;
--注意:update语句如果没有加where条件,则会将表中所有数据全部修改

1.4删除表中的数据

--删除数据
delete from onetable where NAME="芳";
--注意:delete语句如果没有加where条件,则会将表中所有数据全部删除

DQL

用来查询数据库中表的数据

1.1 基础查询

--基础查询==============
--例子:查询name,age两列
select name,age from stu;
--例子:查询所有字段
select * from stu;
-- 查询地址信息---这个是不去重的
select address from stu;
-- 查询地址信息---这个是去重的
select distinct address from stu;
--查询姓名,数学成绩,英语成绩----这个是不带别名
select name,math,english from stu;
--查询姓名,数学成绩,英语成绩----这个是带别名
select name as 姓名,math as 数学成绩,english as 英语成绩 from stu;

1.2条件查询

符合 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<>或!= 不等于
between…and… 在某个范围之内(都包含)
in(…) 多选一
link 占位符 模糊查询、单个任意字符 %多个任意字符
is null 是 null
is not null 不是 null
and 或 && 并且
or 或 || 或者
not 或 ! 非,不是
-- 模糊查询 like =====================
/*
	通配符:
	 (1)_:代表单个任意字符
	 (2)%:代表任意个数字符
*/
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;


-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;


-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 &&  age <= 30;
select * from stu where age >= 20 and  age <= 30;

select * from stu where age BETWEEN 20 and 30;

-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01'  之间的学员信息

select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';


-- 5. 查询年龄等于18岁的学员信息

select * from stu where age = 18;

-- 6. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;

select * from stu where age <> 18;

-- 7. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);

-- 8. 查询英语成绩为 null的学员信息  
-- 注意: null值的比较不能使用 = != 。需要使用 is  is not
 
select * from stu where english = null; -- 不行的

select * from stu where english is null;

select * from stu where english is not null;


-- 模糊查询 like =====================
/*
	通配符:
	 (1)_:代表单个任意字符
	 (2)%:代表任意个数字符
*/

-- 1. 查询姓'马'的学员信息

select * from stu where name like '马%';

-- 2. 查询第二个字是'花'的学员信息   

select * from stu where name like '_花%';

-- 3. 查询名字中包含 '德' 的学员信息

select * from stu where name like '%德%';

1.3 排序查询

/*
	排序查询:
		* 语法:SELECT 字段列表 FROM 表名  ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
		* 排序方式:
				* ASC:升序排列(默认值)
				* DESC:降序排列
*/

-- 1.查询学生信息,按照年龄升序排列 

select * from stu order by age ;

-- 2.查询学生信息,按照数学成绩降序排列

select * from stu order by math desc ;

-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

select * from stu order by math desc , english asc ;

1.4聚会函数

函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

聚会函数语法:SELECT 聚合函数名(列名) FROM 表;

> 注意:null 值不参与所有聚合函数运算

上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count(*) 来实现。* 表示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*)

select count(*) from stu;
  • 查询数学成绩的最高分

    select max(math) from stu;
    
  • 查询数学成绩的最低分

    select min(math) from stu;
    
  • 查询数学成绩的总分

    select sum(math) from stu;
    
  • 查询数学成绩的平均分

    select avg(math) from stu;
    
  • 查询英语成绩的最低分

    select min(english) from stu;
    

1.5分组查询

/*
	分组函数
			SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤]…;
*/
select * from stu ;
-- 1. 查询男同学和女同学各自的数学平均分

select sex, avg(math) from stu group by sex;

-- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select name, sex, avg(math) from stu group by sex;

-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数

select sex, avg(math),count(*) from stu group by sex;

-- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组

select sex, avg(math),count(*) from stu where math > 70 group by sex;

-- 4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。

select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;

1.6分页查询

/*
	分页查询:

			SELECT 字段列表 FROM 表名 LIMIT  起始索引 , 查询条目数
				* 起始索引:从0开始

*/
select * from stu ;
-- 1. 从0开始查询,查询3条数据
select * from stu limit 0 , 3;


-- 2. 每页显示3条数据,查询第1页数据
select * from stu limit 0 , 3;
-- 3. 每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3;
-- 4. 每页显示3条数据,查询第3页数据

select * from stu limit 6 , 3;

-- 起始索引 = (当前页码 - 1) * 每页显示的条数

2DQL系列数据表代码

--查询所有数据
select * from stu;
-- 创建stu表
CREATE TABLE stu (
 id int, -- 编号
 name varchar(20), -- 姓名
 age int, -- 年龄
 sex varchar(5), -- 性别
 address varchar(100), -- 地址
 math double(5,2), -- 数学成绩
 english double(5,2), -- 英语成绩
 hire_date date -- 入学时间
);

-- 添加数据
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date) 
VALUES 
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');


--基础查询==============
--例子:查询name,age两列
select name,age from stu;
--例子:查询所有字段
select * from stu;
-- 查询地址信息---这个是不去重的
select address from stu;
-- 查询地址信息---这个是去重的
select distinct address from stu;
--查询姓名,数学成绩,英语成绩----这个是不带别名
select name,math,english from stu;
--查询姓名,数学成绩,英语成绩----这个是带别名
select name as 姓名,math as 数学成绩,english as 英语成绩 from stu;

--条件查询==============
/**

语法:select 字段列表 from where 添加列表

*/
- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;


-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;


-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 &&  age <= 30;
select * from stu where age >= 20 and  age <= 30;

select * from stu where age BETWEEN 20 and 30;

-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01'  之间的学员信息

select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';


-- 5. 查询年龄等于18岁的学员信息

select * from stu where age = 18;

-- 6. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;

select * from stu where age <> 18;

-- 7. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);

-- 8. 查询英语成绩为 null的学员信息  
-- 注意: null值的比较不能使用 = != 。需要使用 is  is not
 
select * from stu where english = null; -- 不行的

select * from stu where english is null;

select * from stu where english is not null;


-- 模糊查询 like =====================
/*
	通配符:
	 (1)_:代表单个任意字符
	 (2)%:代表任意个数字符
*/
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;


-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;


-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 &&  age <= 30;
select * from stu where age >= 20 and  age <= 30;

select * from stu where age BETWEEN 20 and 30;

-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01'  之间的学员信息

select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';


-- 5. 查询年龄等于18岁的学员信息

select * from stu where age = 18;

-- 6. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;

select * from stu where age <> 18;

-- 7. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);

-- 8. 查询英语成绩为 null的学员信息  
-- 注意: null值的比较不能使用 = != 。需要使用 is  is not
 
select * from stu where english = null; -- 不行的

select * from stu where english is null;

select * from stu where english is not null;


-- 模糊查询 like =====================
/*
	通配符:
	 (1)_:代表单个任意字符
	 (2)%:代表任意个数字符
*/

-- 1. 查询姓'马'的学员信息

select * from stu where name like '马%';

-- 2. 查询第二个字是'花'的学员信息   

select * from stu where name like '_花%';

-- 3. 查询名字中包含 '德' 的学员信息

select * from stu where name like '%德%';


/*
	排序查询:
		* 语法:SELECT 字段列表 FROM 表名  ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
		* 排序方式:
				* ASC:升序排列(默认值)
				* DESC:降序排列
*/

-- 1.查询学生信息,按照年龄升序排列 

select * from stu order by age ;

-- 2.查询学生信息,按照数学成绩降序排列

select * from stu order by math desc ;

-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

select * from stu order by math desc , english asc ;

--聚合函数
/**

| 函数名      | 功能                             |
| ----------- | -------------------------------- |
| count(列名) | 统计数量(一般选用不为null的列) |
| max(列名)   | 最大值                           |
| min(列名)   | 最小值                           |
| sum(列名)   | 求和                             |
| avg(列名)   | 平均值                           |


*/
-- 查询当前表有多少数据
select count(*) from stu;
-- 查询数学成绩的最高分
select max(math) from stu;

/*
	分组函数
			SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤]…;
*/
select * from stu ;
-- 1. 查询男同学和女同学各自的数学平均分

select sex, avg(math) from stu group by sex;

-- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select name, sex, avg(math) from stu group by sex;

-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数

select sex, avg(math),count(*) from stu group by sex;

-- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组

select sex, avg(math),count(*) from stu where math > 70 group by sex;

-- 4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。

select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;


/*
	分页查询:

			SELECT 字段列表 FROM 表名 LIMIT  起始索引 , 查询条目数
				* 起始索引:从0开始

*/
select * from stu ;
-- 1. 从0开始查询,查询3条数据
select * from stu limit 0 , 3;


-- 2. 每页显示3条数据,查询第1页数据
select * from stu limit 0 , 3;
-- 3. 每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3;
-- 4. 每页显示3条数据,查询第3页数据

select * from stu limit 6 , 3;

-- 起始索引 = (当前页码 - 1) * 每页显示的条数

DCL

用来定义数据库的访问权限和安全基本,及创建用户

约束

约束名称 描述 关键字
非空约束 保证列中所有数据不能有null值 not null
唯一约束 保证列中所有数据各不相同 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary yek
检查约束 保证列中的值满足某一条件 check
默认约束 保存数据时,未指定值则采用默认值 default
外键约束 外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性 poreign key
CREATE TABLE emp(
id INT PRIMARY KEY, -- 员工id,主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL, -- 入职日期,非空
salary DOUBLE(7,2) NOT NULL, -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0  -- 奖金,如果没有奖金就默认为0
);
INSERT INTO emp(id,ename,joindate,salary,bonus)values(1,'张三','1999-11-11',8000,5000);

-- 演示主键约束:非空且唯一
INSERT INTO emp(id,ename,joindate,salary,bonus)values(null,'张三','1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus)values(1,'张三','1999-11-11',8000,5000);
-- 演示非空约束
INSERT INTO emp(id,ename,joindate,salary,bonus)values(2,null,'1999-11-11',8000,5000);
-- 演示唯一约束
INSERT INTO emp(id,ename,joindate,salary,bonus)values(2,'张三','1999-11-11',8000,5000);

SELECT * from emp;
show tables;

你可能感兴趣的:(mysql,数据库,oracle)