一、基本查询语句
虽然SQL语言不区分关键字大小,但是我们这里关键字一律用大写表示,便于我们区分识别,更好的进行学习。
1、从表中查找具体的某列数据语法
SELECT 列表名1,列表名2……
FROM 表名称;
实例1:从名为student的表中查询出姓名和性别这两列的数据
SELECT 姓名,性别
FROM student;
实例2:我不知道student表中有什么数据,列名是什么?那我就查询出全部列,一个*号就搞定了。
SELECT *
FROM student;
实例3:我想把student这个表导出来给客户看,但是客户是外国人,学号,姓名这些列表名他可能看不懂,我想为列表设定别名。
SELECT 姓名 AS name,性别 AS gender
FROM student;
实例4:student表中好像有两个猴子,我想筛选掉表中的重复数据,那么语法为
SELECT DISTINCT 列名称1,列名称2……
FROM 表名称;
SELECT DISTINCT后面接多列时表示,多列的数据要完全一致,该条数据才会被筛选掉。
SELECT DISTINCT 学号,姓名
FROM student;
这里姓名为猴子的这两条数据不会被筛选为一条数据,因为虽然他们姓名列上都是猴子,但是他们的学号分别为0001和0002,存在不同,应该是两个不同的人。如果你非要筛选猴子,那么可以只对姓名列进行筛选,语法如下:(数据量大的情况下,重名的概率挺大的,单独对姓名进行筛选意义不大)
SELECT DISTINCT 姓名
FROM student;
二、指定查询条件查询(WHERE)
实例1:我想查询表中姓名叫猴子的数据,看他们的出生日期是多少,查询语句为:
SELECT 姓名,出生日期
FROM student
WHERE 姓名='猴子';
这里需要注意SQL的书写顺序和运行顺序是不一样的,理解SQL的运行顺序有助于我们书写SQL语句,上面语句中的运行顺序是:
- 先运行FROM student
- 再运行WHERE 姓名='猴子'
- 最后才运行SELECT 姓名,出生日期
注意:WHERE子句中不能使用聚合函数(汇总函数),只有SELECT子句,HAVING子句,ORDER BY子句中可以使用聚合函数。
三、SQL语句的注释和注意事项
注释可以帮助我们更好地阅读SQL语句,也利于别人读懂我们的语句,是SQL语句的重要组成部分。注释分为单行注释和多行注释。
- 单行注释:
红框里面的就是注释,注释内容前面加-- ,两个横杠和一个空格,空格别忘记了。
- 多行注释:
红框里面的就是注释,注释内容前面加/*(斜杠和星号),注释内容后面加*/(星号和斜杠)。
SQL书写规则注意事项:
- 列名命名时不能有空格,列名不加单引号;名称只能使用字母、数字、下划线构成,并且只能以字母作为开头,此外名称不能有重复
- 英文的列名和表名不区分大小写,但是为了SQL语句便于理解,建议是:关键字大写,表名的首字母大写,其余(列名等)小写
- SQL语句以分号(;)结尾
- 所有符号都是英文半角状态输入
四、运算符号
SQL有三大类运算符号:算数运算符,比较运算符,逻辑运算符
1、算数运算符:
实例1:现在有一个名为score的成绩表,我想用百分比去表示他们的成绩:
SELECT 学号,成绩,
成绩/100 AS 百分比成绩
FROM score;
2、比较运算符:
实例1:我想要找出成绩小于60分的数据,那么查询语句为:
SELECT 学号,成绩
FROM score
WHERE 成绩 < 60;
实例2:我想从student表中找出出生日期小于1990-01-01的数据,那么查询语法为:
SELECT 姓名,出生日期
FROM student
WHERE 出生日期 < '1990-01-01';
3、逻辑运算符:
实例1:我想要找出成绩大于等于60且小于等于90的数据,那么查询语法为:
SELECT 学号,成绩
FROM score
WHERE 成绩>=60 AND 成绩<=90;
也可以用以下查询语法进行查询,查询结果是一样的:
SELECT 学号,成绩
FROM score
WHERE 成绩 BETWEEN 60 AND 90;-- 包括60和90这两个值
BETWEEN匹配的是范围内的所有值,包括指定的开始和结束值。
此外,对于编程来说,同一个查询目的可以用好几种实现方式,自己可以多思考,多比较,找出最简洁有效的办法,不断优化自己写的查询语句。
实例2:我想要找出成绩小于等于60和大于等于90的数据,那么查询语法为:
SELECT 学号,成绩
FROM score
WHERE 成绩<=60 OR 成绩>=90;
实例3:我想找出姓名是猴子和马云的出生日期,那么查询语法为:
SELECT 姓名,出生日期
FROM student
WHERE 姓名 IN ('猴子','马云');
实例4:我想找出姓名不是猴子和马云的出生日期,那么查询语法为:
SELECT 姓名,出生日期
FROM student
WHERE 姓名 NOT IN ('猴子','马云');
实际是in语句是or语句的简便写法,实例4的语句可以换成or来写,只是用in来写相对更简洁。
五、字符串的模糊查询
我们用like来进行字符串的模糊查询,下面我们一起通过实例来进行分析学习。
实例1:查询姓‘猴’的学生名单,查询语句为:
SELECT *
FROM student
WHERE 姓名 LIKE '猴%';-- 其中%号表示任意字符串的意思
实例2:查询姓名中最后一个字是‘猴’的学生名单,查询语句为:
SELECT *
FROM student
WHERE 姓名 LIKE '%猴';
实例3:查询姓名中带‘猴’的学生名单,查询语句为:
SELECT *
FROM student
WHERE 姓名 LIKE '%猴%';
这样姓名中只要有‘猴’字的学生名单都被找出来了。
实例4:查询姓‘王’的学生名单,并且姓名是三个字的,查询语句为:
SELECT *
FROM student
WHERE 姓名 LIKE '王__';
需要注意的是上面语法中王后面接了两个下划线,一个下划线表示任意一个字符,我们接下来看一下查询结果:
只出现了一个王思聪的数据,王猴的数据就不会出现,因为我们查询的是姓名是三个字的,王猴只有两个字。
最后,以上所有的查询操作都不会修改原表格的数据,它类似于Excel的筛选功能,所以自己练习的时候可以大胆尝试。
欢迎大家看看我写的其他MySQL基础知识系列文章,希望对你们有所帮助!
1、MySQL基础入门知识
假装在念书:MySQL基础入门知识zhuanlan.zhihu.com3、MySQL基础知识—汇总查询
假装在念书:MySQL基础知识—汇总查询zhuanlan.zhihu.com4、MySQL基础知识—复杂查询
假装在念书:MySQL基础知识—复杂查询zhuanlan.zhihu.com5、MySQL基础知识—多表查询
假装在念书:MySQL基础知识—多表查询zhuanlan.zhihu.com六、实践出真知
现在我们打开SQLZOO网站:https://sqlzoo.net/,点击下面图片红色框选部分,开始习题练习,进行查询语句的练习:
第一部分、SELECCT基础知识习题:
第一题代码:
SELECT population FROM world
WHERE name = 'Germany';
第二题代码:
SELECT population FROM world
WHERE name IN ('Sweden','Norway','Denmark');
第三题代码:
SELECT name,area
FROM world
WHERE area BETWEEN 200000 AND 250000;
第二部分、从世界中选择习题:
第一题代码:
SELECT name, continent, population
FROM world;
第二题代码:
SELECT name FROM world
WHERE population >= 200000000;
第三题代码:
SELECT name,gdp/population
FROM world
WHERE population >= 200000000;
第四题代码:
SELECT name,population/1000000
FROM world
WHERE continent = 'south america';
第五题代码:
SELECT name,population
FROM world
WHERE name IN ('France','Germany','Italy');
第六题代码:
SELECT name
FROM world
WHERE name LIKE ('%United%');
第七题代码:
SELECT name,population,area
FROM world
WHERE area >= 3000000 or population >= 250000000;
第八题代码:
SELECT name,population,area
FROM world
WHERE area >= 3000000 xor population >= 250000000;
第九题代码:
SELECT name,ROUND(population/1000000,2),ROUND(gdp/1000000000,2)
FROM world
WHERE continent = 'South America';
第十题代码:
SELECT name,round(gdp/population,-3)
FROM world
WHERE gdp >= 1000000000000;
第三部分、SELECT names(字符串模糊查询练习)
练习网址:http://zh.sqlzoo.net/wiki/SELECT_names/zh
第一题代码:
-- 找出以Y字母开头的国家
SELECT name
FROM world
WHERE name LIKE 'Y%';
第二题代码:
SELECT name
FROM world
WHERE name LIKE '%Y';
第三题代码:
SELECT name
FROM world
WHERE name LIKE '%x%';
第四题代码:
SELECT name
FROM world
WHERE name LIKE '%land';
第五题代码:
SELECT name
FROM world
WHERE name LIKE 'C%ia';
第六题代码:
SELECT name
FROM world
WHERE name LIKE '%oo%';
第七题代码:
SELECT name
FROM world
WHERE name LIKE '%a%a%a%';
第八题代码:
SELECT name FROM world
WHERE name LIKE '_t%'
ORDER BY name;
第九题代码:
SELECT name FROM world
WHERE name LIKE '%o__o%';
第十题代码:
SELECT name FROM world
WHERE name LIKE '____';
第十一题代码:
SELECT name
FROM world
WHERE name = capital;