SQL语言
在学习SQL之前,默认大家已经安装且配置好了MySQl(这里不做介绍)。
那么我们先来复习一下:
在了解完SQL的分类:DDL、DML、DQL、DCL之后,这里详细介绍一下前3种SQL语言(DCL我暂时还没学,就不介绍了)。
1.DDL——操作数据库
DDL操作数据库的语法还是比较简单的,这里我们只说几点对于像我一样的初学者需要注意的注意事项:
1.在对数据库操作时,看仔细到底是databases还是database。这在我们学的前期能帮我们减少一些报错。
2.在创建和删除表时,尽量使用 if (not) exists 判断,同样能减少一些报错。
2.DDL——操作表
2.1 查询表
2.2 创建表
补充:数据类型
注意事项:
1.与java不同的时,mysql声明变量数据类型时是变量名在前,数据类型在后。
2.double类型:后面一般跟两个参数(1是总长度,2是小数点后保留的位数)
3.日期date类型:格式是: ‘xxxx-xx-xx’ 。引号要注意不能丢!!!
4.char(10)和varchar(10)的区别:char是只要你存入字符串,就一定会占据你规定的所有空间,如这里的10;varchar只会占用你存入的字符串的对应空间。如下:
2.3 修改表
注意:
在添加一列之后,会默认有值并且都是null。如果想要在已有其它数据的几行为该列添加想要的数据,就只能去修改null,而不是去添加。否则会创建新的行并且添加。
2.4 删除表
3.DML——操作表中数据
3.1 添加数据
这里已经创建了stu表:
添加数据:
-- 查询所有数据
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 );
-- 可以多写几个括号,中间用逗号隔开
3.2 修改数据
修改数据:
update stu set gendar ='女' where name="张三";
-- 将张三的性别改为女
UPDATE stu Set birthday='2001-11-11',score=99.99 where name='张三';
3.3 删除数据
4.DQL——查询表中数据
先看一下DQL大家族:
我们这里已经创建了这么一张表,接下来的查询操作都是对该表进行的:
4.1 基础查询
-- 查询所有列的数据,列名的列表可以用*替代。不建议使用,不够清晰
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 条件查询
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 排序查询
SELECT
*
FROM
men;
-- 先按数学成绩降序排列,如果数学成绩一样,则按英语升序排列(不写默认升序)
SELECT
*
FROM
men
ORDER BY
math DESC,
English ASC;
4.4 分组查询
补充:聚合函数
分组查询:
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 分页查询
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) * 每页显示的条数