MYSQL<三>
时间:2021-07-01 10:21:17
帮助过:6人阅读
<>,表示不等于的关系
SELECT * FROM student WHERE gender != ‘女‘;
SELECT * FROM student WHERE gender <> ‘女‘;
-- 错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘>< ‘女‘ LIMIT 0, 1000‘ at line 1
SELECT * FROM student WHERE gender >< ‘女‘;
-- 5、* 通配符:星号通配符,用来代替所有的字段名称
SELECT * FROM student;
-- 6、_ 通配符:下划线通配符(占位通配符),结合LIKE关键字使用
-- 注意:_ 通配符占一个位置,这个位置上可以是任意字符,但是一定有一个字符
INSERT INTO student VALUES(NULL, ‘曹丕‘, ‘男‘, ‘110‘), (NULL, ‘曹植‘, ‘男‘, ‘120‘), (NULL, ‘曹孟德‘, ‘男‘, ‘130‘), (NULL, ‘曹‘, ‘男‘, ‘140‘);
-- 需求:查询以‘曹‘开头的,后面接一个任意字符的记录
SELECT * FROM student WHERE studentname LIKE ‘曹_‘;
-- 需求:查询以‘曹‘开头的,后面接两个任意字符的记录
SELECT * FROM student WHERE studentname LIKE ‘曹__‘;
-- 需求:查询以一个任意字符开头,中间有一个‘孟‘字,后面接一个任意字符的记录
SELECT * FROM student WHERE studentname LIKE ‘_孟_‘;
-- 需求:查询以一个任意字符开头,中间有一个‘曹‘字,后面接一个任意字符的记录
SELECT * FROM student WHERE studentname LIKE ‘_曹_‘;
-- 注意:体会占位的含义,下句插入空格+曹彰,会被查出
INSERT INTO student VALUES(NULL, ‘ 曹彰‘, ‘男‘, 150);
SELECT * FROM student WHERE studentname LIKE ‘_曹_‘;
-- 7、% 通配符:百分号通配符(任意匹配通配符),结合LIKE关键字使用
-- 任意匹配的含义:不论匹配一个字符,还是匹配多个字符,甚至没有字符,均匹配
SELECT * FROM student WHERE studentname LIKE ‘曹%‘;
-- 下句中的‘曹‘字符后有两个%百分号的效果 和 有一个%百分号的效果是一致的,都是在‘曹‘字符后任意匹配
SELECT * FROM student WHERE studentname LIKE ‘曹%%‘;
-- 下句表示在‘曹‘字符前后任意匹配
SELECT * FROM student WHERE studentname LIKE ‘%曹%‘;
-- 匹配所有的记录(非空记录)
SELECT * FROM student WHERE studentname LIKE ‘%‘;
-- 匹配所有联系电话以1开头的记录
SELECT * FROM student WHERE phone LIKE ‘1%‘;
-- 匹配所有联系电话非空的记录
SELECT * FROM student WHERE phone LIKE ‘%‘;
-- 8、使用LIKE进行模糊查询时,取反操作NOT LIKE,不会对NULL值进行匹配的
SELECT * FROM student WHERE phone NOT LIKE ‘1%‘;
-- 9、在WHERE子句中使用IN关键字描述处于某一个小的范围的集合
-- IN对应的小范围集合的值在表中均有的情况:匹配值的记录被取出
SELECT * FROM student WHERE phone IN (‘110‘, ‘120‘, ‘666‘);
-- IN对应的小范围集合的值在表中部分有的情况:匹配值的记录被取出
SELECT * FROM student WHERE phone IN (‘110‘, ‘120‘, ‘777‘);
-- 注意:上述IN的使用可以理解为:
SELECT * FROM student WHERE phone = ‘110‘ OR phone = ‘120‘ OR phone = ‘777‘;
-- 10、在WHERE子句中使用NOT IN关键字描述不处于某一个小的范围的集合
SELECT * FROM student WHERE phone NOT IN (‘110‘, ‘120‘, ‘666‘);
SELECT * FROM student WHERE phone NOT IN (‘110‘, ‘120‘, ‘777‘);
-- 注意:IN 某一个小的范围 + NOT IN 某一个小的范围 不等于 全部范围,因为忽略了NULL值
-- 11、使用IS NULL筛选字段的内容为NULL的记录
SELECT * FROM student WHERE phone IS NULL;
-- 12、使用IS NOT NULL筛选字段的内容不为NULL的记录
SELECT * FROM student WHERE phone IS NOT NULL;
-- 注意:IS NULL 筛选出来的记录 + IS NOT NULL 筛选出来的记录 等于 所有记录
-- 13、使用大于、小于、大于等于、小于等于符号进行范围筛选(同样不包含NULL值对应的记录)
SELECT * FROM student WHERE phone > ‘150‘; -- 2条记录
SELECT * FROM student WHERE phone < ‘150‘; -- 7条记录
SELECT * FROM student WHERE phone >= ‘150‘; -- 3条记录
SELECT * FROM student WHERE phone <= ‘150‘; -- 8条记录
-- 14、使用BETWEEN...AND...做范围筛选(考虑边界值是否包含?答:两个边界值均包含在内)
SELECT * FROM student WHERE studentid BETWEEN 3 AND 8;
-- 下句查询的结果:没有满足条件的记录
SELECT * FROM student WHERE studentid BETWEEN 8 AND 3;
-- 注意:BETWEEN 值1 AND 值2 相当于 大于等于 值1 且 小于等于 值2
-- 198行可以理解为下句:
SELECT * FROM student WHERE studentid >= 3 AND studentid
<= 8;
-- 201行可以理解为下句:
SELECT * FROM student WHERE studentid >= 8 AND studentid
<= 3;
-- ########## 04、汇总数据 ##########
-- 1、使用DISTINCT关键字去除重复的值
-- 需求:获取学生的性别
SELECT gender FROM student;
-- 上句从语法上看没有问题,但是从语义上,会取出很多重复的数据,而这些重复的数据无意义
SELECT DISTINCT gender FROM student;
-- *****************************************************
-- 聚合函数:SUM()、AVG()、MAX()、MIN()、COUNT()
SELECT * FROM student;
-- 2、单独使用聚合函数
-- COUNT(*)统计的记录针对非空字段进行的统计
SELECT COUNT(*) AS 记录条数 FROM student;
-- 对字段的内容中没有NULL值的字段(主键字段)进行COUNT(),结果和COUNT(*)的记录数一致
SELECT COUNT(studentid) AS 记录条数 FROM student;
-- 对字段的内容中没有NULL值的字段(非空字段)进行COUNT(),结果和COUNT(*)的记录数一致
SELECT COUNT(studentname) AS 记录条数 FROM student;
-- 对字段的内容中有NULL值的字段(可空字段)进行COUNT(),结果和COUNT(*)的记录数相差了NULL值的个数
SELECT COUNT(phone) AS 非空记录条数 FROM student;
-- 注意:字段内容中的NULL值不会被COUNT()这个聚合函数统计在内
-- COUNT(*)函数中的* 并不是匹配所有的字段,而是那些非空的字段
SELECT MAX(studentid) AS 最大学号 FROM student;
SELECT MIN(studentid) AS 最小学号 FROM student;
SELECT MAX(phone) AS 最大联系号码 FROM student;
SELECT MIN(phone) AS 最小联系号码 FROM student;
-- 注意:字段内容中的NULL值不会被MAX()、MIN()这两个聚合函数统计在内
ALTER TABLE student ADD score INT AFTER phone;
DESC student;
SELECT * FROM student;
-- 此时,新增了score成绩字段(可空),默认值均为NULL,对其进行SUM() 和 AVG(),均为NULL值
SELECT SUM(score) AS 总分 FROM student; -- NULL
SELECT AVG(score) AS 平均分 FROM student; -- NULL
-- 更新随机分数,测试一下
SELECT ROUND(RAND() * 100);
SELECT SUBSTRING(RAND() * 100, 1, 2); -- 这种形式可能会出现个位数字加小数点点号的结果
-- 更新表中的数据
UPDATE student SET score = ROUND(RAND() * 100) WHERE studentid IN (1, 2, 8);
SELECT SUM(score) AS 总分 FROM student;
SELECT AVG(score) AS 平均分 FROM student;
-- 注意:字段内容中的NULL值不会被SUM()、AVG()这两个聚合函数统计在内
-- AVG(某个字段) = SUM(某个字段) / COUNT(某个字段)
SELECT SUM(score) / COUNT(score) FROM student;
-- 聚合函数小结:聚合函数均无视NULL值
MYSQL<三>
标签:max varchar default tab 顺序 汇总 符号 划线 取出