当前位置:Gxlcms > 数据库问题 > MYSQL<三>

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   顺序   汇总   符号   划线   取出   

人气教程排行