sql 查询重复数据大于2条以上的_SQL的简单查询

时间:2024-10-18 07:57:48

在上一节中我们们安装了mysql以及navicat,并掌握了如何创建库、创建表、修改表和插入、删除以及更新数据。这一节我们将继续学习SQL的简单查询语句。

一、基本的查询语句

1、select子句和from子句

select <列名1>,<列名2>...
from <表名>;

select *
from <表名>;(查看全部列)

查询语句的运行过程如图

2、为列名设定别名

select 
<列名1> as bieming,
<列名2> as '别名';

3、删除重复数据

删除单列重复数据:
select distinct <列名>
from student;

删除多列重复数据:
select distinct <列名1>, <列名2>
from student;

注意,删除多列重复数据是指删除列1和列2都重复的数据

二、指定查询条件

1、where子句

select <列名1>,<列名2>...                                3
from <表名>                                              1
where (运算符);                                           2

注意SQL语句的运行顺序,select子句最后运行,其他子句按书写顺序运行

2、运算符——关系运算符

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E5%85%B3%E7%B3%BB%E8%BF%90%E7%AE%97%E7%AC%A6+%26+%E5%90%AB%E4%B9%89+%5C%5C++%5Chline+%3D++%26+%E7%AD%89%E4%BA%8E++%5C%5C++%5Chline+%3C++%26+%E5%B0%8F%E4%BA%8E+%5C%5C++%5Chline+%3E++%26+%E5%A4%A7%E4%BA%8E+%5C%5C++%5Chline+%3C%3D++%26+%E5%B0%8F%E4%BA%8E%E7%AD%89%E4%BA%8E++%5C%5C+%5Chline+%3E%3D++%26+%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E++%5C%5C+%5Chline+%3C%3E%2F%21%3D++%26+%E4%B8%8D%E7%AD%89%E4%BA%8E+%5C%5C+%5Chline++%5Cend%7Barray%7D%5C%5C

注意,运用关系运算符比较字符串时,是按照字典顺序比较的,比如字符串'10'<'2',因为字符串10是以1开头的,1比2小。在处理数据时,当发现“大的数据”反而排在“小的数据”的前面,这时就要注意该列数据的类型是以字符串形式存储的。

——算术运算符

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6+%26+%E5%90%AB%E4%B9%89+%5C%5C++%5Chline+%2B++%26+%E5%8A%A0++%5C%5C++%5Chline+-++%26+%E5%87%8F+%5C%5C++%5Chline+%2A++%26+%E4%B9%98+%5C%5C++%5Chline+%2F+%26+%E9%99%A4++%5C%5C+++%5Chline++%5Cend%7Barray%7D%5C%5C

运用算术运算符时,注意:

1、括号中表达式优先于括号外的

. (1+2)*3 
sql会先运行1+2,再运行*3

2、与空值进行运算结果仍为空值

5+null=null
null不能用于数值比较,null和null也不相等

注意!根据我们的常规逻辑,集合a和集合!a构成全集,但是在sql中却不然,如下所示

共8条数据

这是一个成绩表,其中有一行数据的成绩为空值,现在我们想找出成绩小于60的数据

没有输出结果

再找出成绩大于等于60的数据

只输出了7条数据

集合成绩<60和集合>=60是构成全集的,但在两个结果中,都没有出现成绩为null的数据,这是因为null并不能和数值60进行比较!

既然不能用=null来找出空值的话,那么如何查找出空值值呢?这时候空判断运算符就可以上场了。

——空判断运算符

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E7%A9%BA%E5%88%A4%E6%96%AD%E8%BF%90%E7%AE%97%E7%AC%A6+%26+%E5%90%AB%E4%B9%89+%5C%5C++%5Chline+is+%5C+null+%26+%E7%A9%BA+%5C%5C++%5Chline+is+%5C+not+%5C+null+%26+%E9%9D%9E%E7%A9%BA+%5C%5C++++%5Chline++%5Cend%7Barray%7D%5C%5C

——逻辑运算符

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6+%26+%E5%90%AB%E4%B9%89+%5C%5C++%5Chline+not%26+%E5%90%A6%E5%AE%9A%E6%9F%90%E4%B8%80%E6%9D%A1%E4%BB%B6++%5C%5C++%5Chline+and++%26+%E5%B9%B6%E4%B8%94+%5C%5C++%5Chline+between%26+%E8%8C%83%E5%9B%B4%E6%9F%A5%E6%89%BE+%5C%5C++%5Chline+or++%26+%E6%88%96%E8%80%85++%5C%5C+%5Chline+in++%26+or%E7%9A%84%E7%AE%80%E5%8D%95%E7%94%A8%E6%B3%95++%5C%5C++%5Chline++%5Cend%7Barray%7D%5C%5C

not

与上面结果相同

注意,and优先于or,例如,我想要找出性别为男,名字为猴子或马云的数据

输出了一条性别是女的数据

结果正确

between

or

in

not in

——模糊查询运算符

like+

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E9%80%9A%E9%85%8D%E7%AC%A6+%26+%E5%90%AB%E4%B9%89+%5C%5C++%5Chline++%5C%25%26+%E4%BB%BB%E6%84%8F%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%880-n%E4%BD%8D%EF%BC%89+%5C%5C++%5Chline+%5C_+%26+%E4%B8%80%E4%B8%AA%E4%B8%8B%E5%88%92%E7%BA%BF%E8%A1%A8%E7%A4%BA%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%5C%5C+++%5Chline++%5Cend%7Barray%7D%5C%5C%5C

找出姓猴的人

找出名字最后一个字是猴的人

找出名字包含猴的人

两个下划线,找出叫王**的人

三、注释

单行注释:--空格
多行注释:/*
               ...*/

四、本节出现的ERROR

1、Error : Field '教师号' doesn't have a default value

问题描述:

我在teacher表了,加了age列

当我指定age列插入数据时,就开始报Error : Field '教师号' doesn't have a default value的错误,但我指定教师号列却可以插入数据

问题解决:插入数据时,主键字段不能为空。

2、Invalid use of NULL value

问题描述:想要修改age列的非空设置

问题解决:age列的数据为null,与not null的设置冲突。