SQL语言

在学习SQL之前,默认大家已经安装且配置好了MySQl(这里不做介绍)。

那么我们先来复习一下:

java sql预解析 java sql语句解析_java


在了解完SQL的分类:DDL、DML、DQL、DCL之后,这里详细介绍一下前3种SQL语言(DCL我暂时还没学,就不介绍了)。

1.DDL——操作数据库

java sql预解析 java sql语句解析_java_02


DDL操作数据库的语法还是比较简单的,这里我们只说几点对于像我一样的初学者需要注意的注意事项

1.在对数据库操作时,看仔细到底是databases还是database。这在我们学的前期能帮我们减少一些报错。

2.在创建和删除表时,尽量使用 if (not) exists 判断,同样能减少一些报错。

2.DDL——操作表

2.1 查询表

java sql预解析 java sql语句解析_java_03

2.2 创建表

java sql预解析 java sql语句解析_数据库_04

补充:数据类型

java sql预解析 java sql语句解析_数据_05


注意事项:

1.与java不同的时,mysql声明变量数据类型时是变量名在前,数据类型在后

2.double类型:后面一般跟两个参数(1是总长度,2是小数点后保留的位数)

3.日期date类型:格式是: ‘xxxx-xx-xx’ 。引号要注意不能丢!!!

4.char(10)和varchar(10)的区别:char是只要你存入字符串,就一定会占据你规定的所有空间,如这里的10;varchar只会占用你存入的字符串的对应空间。如下:

java sql预解析 java sql语句解析_数据库_06

2.3 修改表

java sql预解析 java sql语句解析_java sql预解析_07


注意

在添加一列之后,会默认有值并且都是null。如果想要在已有其它数据的几行为该列添加想要的数据,就只能去修改null,而不是去添加。否则会创建新的行并且添加。

2.4 删除表

java sql预解析 java sql语句解析_数据库_08

3.DML——操作表中数据

3.1 添加数据

java sql预解析 java sql语句解析_数据库_09


这里已经创建了stu表:

java sql预解析 java sql语句解析_sql_10


添加数据:

-- 查询所有数据
SELECt * FROM stu;
-- 给指定列添加数据
INSERT INTO stu ( id, NAME, gendar )
VALUES
	( 1, '张三', '男' );
-- 给所有列添加数据,此时列名的列表可省略																							日期数据要加引号
INSERT INTO stu ( id, NAME, gendar, birthday, score, email, tel, STATUS )
VALUES
	( 2, '李四', '男', '2005-04-22', 88.88, '@qq.com', 13188886666, 1 );
INSERT INTO stu
VALUES
	( 2,'李四', '男', '2005-04-22', 88.88, '@qq.com', 13188886666, 1 ),
	( 2, '李四', '男', '2005-04-22', 88.88, '@qq.com', 13188886666, 1 );
-- 可以多写几个括号,中间用逗号隔开

java sql预解析 java sql语句解析_sql_11

3.2 修改数据

java sql预解析 java sql语句解析_java sql预解析_12


修改数据:

update stu set gendar ='女' where name="张三";
-- 将张三的性别改为女
UPDATE stu Set birthday='2001-11-11',score=99.99 where name='张三';

java sql预解析 java sql语句解析_数据_13

3.3 删除数据

java sql预解析 java sql语句解析_sql_14

4.DQL——查询表中数据

先看一下DQL大家族:

java sql预解析 java sql语句解析_sql_15


我们这里已经创建了这么一张表,接下来的查询操作都是对该表进行的:

java sql预解析 java sql语句解析_java sql预解析_16

4.1 基础查询

java sql预解析 java sql语句解析_sql_17

-- 查询所有列的数据,列名的列表可以用*替代。不建议使用,不够清晰
SELECT
	* 
FROM
	men;
-- 查询 id,name两列
SELECT
	id,
NAME 
FROM
	men;
-- distinct 去重复
SELECT DISTINCT
	address 
FROM
	men;
-- as 化名(as 可省略,但是必须空一格)
SELECT NAME
	,
	math AS 数学成绩,
	English 英语成绩 
FROM
	men;
DELETE 
FROM
	men;`在这里插入代码片`

4.2 条件查询

java sql预解析 java sql语句解析_java sql预解析_18

ELECT
	* 
FROM
	men;
-- 不建议使用JAVA的双与和双或
SELECT
	* 
FROM
	men 
WHERE
	math >= 60 
	AND math <= 80;
SELECT
	* 
FROM
	men 
WHERE
	math BETWEEN 60 
	AND 80;
-- 日期时间也可以用between...and;
SELECT
	* 
FROM
	men 
WHERE
	birthday BETWEEN '1990-01-01' 
	AND '2000-01-01';
SELECT
	* 
FROM
	men 
WHERE
	English = 80;
-- 一个等号判断是否相等
SELECT
	* 
FROM
	men 
WHERE
	English != 80;
-- <>表示不等于
SELECT
	* 
FROM
	men 
WHERE
	English <> 80;
-- or /in(特值) 用来判断或语句
SELECT
	* 
FROM
	men 
WHERE
	math IN ( 66, 78 );
-- 查询是否为null用 is 和 is not;
-- ===================模糊查询======================
SELECT
	* 
FROM
	men 
WHERE
	NAME LIKE '马%';
-- 第一个字是马
SELECT
	* 
FROM
	men 
WHERE
	NAME LIKE '_花%';
-- 第二个字是花
SELECT
	* 
FROM
	men 
WHERE
	NAME LIKE '%马%';
-- 包含马

4.3 排序查询

java sql预解析 java sql语句解析_sql_19

SELECT
	* 
FROM
	men;
-- 先按数学成绩降序排列,如果数学成绩一样,则按英语升序排列(不写默认升序)
SELECT
	* 
FROM
	men 
ORDER BY
	math DESC,
	English ASC;

4.4 分组查询

补充:聚合函数

java sql预解析 java sql语句解析_sql_20


分组查询

java sql预解析 java sql语句解析_sql_21

SELECT
	sex,
	avg( math ) -- 查询男女同学的数学平均分
	
FROM
	men 
GROUP BY
	sex;
SELECT NAME -- 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无意义,如这里的name
	,
	sex,
	avg( math ) 
FROM
	men 
GROUP BY
	sex;
SELECT
	sex,
	avg( math ),
	count( * ) -- 查询男女同学的数学平均分,及各自人数
FROM
	men 
GROUP BY
	sex;
SELECT
	sex,
	avg( math ),
	count( * ) 
FROM
	men 
WHERE
	math > 30 -- 查询男女同学的数学平均分(数学>30才能参与分组),及各自人数
GROUP BY
	sex;
SELECT
	sex,
	avg( math ),
	count( * ) 
FROM
	men 
WHERE
	math > 30 GROUP sex 
HAVING
count( * ) > 1;-- 查询男女同学的数学平均分(数学>30才能参与分组),及各自人数,并且只留下人数>1的一组

4.5 分页查询

java sql预解析 java sql语句解析_数据_22

SELECT
	* 
FROM
	men;
SELECT
	* 
FROM
	men 
	LIMIT 0,-- 从索引为0的位置开始查询,查询3条数据
	3;
SELECT
	* 
FROM
	men 
	LIMIT 0,-- 每页显示两条数据,查询第1页
	2;
SELECT
	* 
FROM
	men 
	LIMIT 2,-- 每页显示两条数据,查询第2页
	2;
SELECT
	* 
FROM
	men 
	LIMIT 4,-- 每页显示两条数据,查询第3页
	2;
--  开始索引=(页数-1) * 每页显示的条数