MySQL的基本查询和条件查询

使用的数据,请前往公众号【程序员汪汪】回复dump,即可获取sql文件。后面的文章会一直使用这些数据。

获取sql文件后,可以使用图形界面工具(如:Navicat),创建一个空的数据库后,执行sql文件中的sql语句。

也可以创建好一个空的数据库后,在系统命令行(不是mysql的shell环境)中使用下面的命令将数据导入数据库:

# 例如:
# root换成自己的mysql用户名,123456换成自己的mysql密码
# demo是我新建的空的数据库, D:\dump.sql 换成自己下载的dump.sql文件所在路径即可。
mysql -u root -p 123456 demo < D:\dump.sql

SELECT语句

SELECT *|{[DISTINCT] column|expression [alias],...} FROM 表名
  • SELECT 标识选择哪些列
  • FROM 标识从哪个表中选

语法:

SELECT 查询列表 FROM 表名;

特点:

  1. 查询列表可以是:表中的字段、常量值、表达式、函数
  2. 查询的结果是一个虚拟的表格

查询全部列

SELECT * FROM 表名;

查询特定的列

SELECT id, name FROM student;

查询表达式

SELECT 100%98;

查询函数

SELECT NOW();

查询时给列取别名

在别名中包含空格或特殊的字符时,使用英文双引号包裹别名

使用别名的好处:

  1. 便于理解
  2. 如果要查询的字段有重名的情况,使用别名可以区分开来

使用as

SELECT 列名1 AS "列名1别名", 列名2 as "列名2别名" FROM 表名;

案例:

SELECT 100%98 as "结果";
SELECT last_name AS "姓", first_name AS "名" FROM employees;

使用空格

SELECT 列名1 "列名1别名", 列名2 "列名2别名" FROM 表名; 

案例:

#查询salary,显示结果为 out_put
SELECT salary "out_put" FROM employees;

查询去重

SELECT DISTINCT 字段名 FROM 表名;

案例:

#查询员工表中涉及到的所有部门编号
SELECT DISTINCT department_id FROM employees;

加号(+)的作用

Java中的 + 号:

  1. 运算符,两个操作数都为数值型
  2. 连接符,只要有一个操作数为字符串,就会被当做连接符使用

MySQL中的 + 号:仅仅只有一个功能,用作运算,即运算符

# 直接运算
SELECT 数值 + 数值;

# 先试图将字符转换成数值,如果转换成功,则继续运算,否则转换成0,在做运算
SELECT 字符 + 数值;

# 结果都为null
SELECT NULL + 值;

CONCAT函数

功能:拼接字符,相当于java中的 "1" + "23" = "123";

SELECT CONCAT(字符1, 字符2, 字符3,...);

IFNULL函数

功能:判断某字段或者表达式是否为null,如果为null返回指定的值,否则返回原本的值

# 如果commission_pct列为null则返回0
SELECT IFNULL(commission_pct, 0) FROM employees;

ISNULL函数

功能:判断某字段或表达式是否为null,如果是则返回1,否则返回0

条件查询

过滤:使用 WHERE 子句,将不满足条件的行(记录)过滤掉

语法:

SELECT 查询列表 FROM 表名 WHERE 筛选条件;
运算符 符号 描述
比较(条件)运算符 >、<、>=、<=、=、<>(!=) 大于、小于、大于等于、小于等于、等于、不等于
BETWEEN...AND... 显示在某一区间的值(包含头尾)
IN(可能的值的集合) 显示在in列表中的值,例如:IN(100, 200, 300)
LIKE 通配符 模糊查询,Like语句中有两个通配符:%用来匹配多个字符;例如first_name like 'a%'; 用来匹配一个字符。例如first_name like 'a';
IS NULL 判断是否为空;IS NULL判断为空; IS NOT NULL判断不为空
逻辑运算符 AND(&&) 多个条件同时成立
逻辑运算符 OR(||) 多个条件任一成立
逻辑运算符 NOT(!) 不成立或者说去反,例:WHERE NOT(salary > 100)

注意:为了方便建表,将between...and.. 、in、like、is null归为运算符,可能不是很准确

按条件表达式筛选

  1. 查询工资>12000的员工信息
SELECT
    * 
FROM
    employees 
WHERE
    salary > 12000;
  1. 查询部门编号不等于90的员工名和部门编号
SELECT
    last_name,
    department_id 
FROM
    employees 
WHERE
    department_id <> 90;

按逻辑表达式筛选

  1. 查询工资在10000到20000之间的员工名、工资以及奖金率(commission_pct)
SELECT
    last_name,
    salary,
    commission_pct 
FROM
    employees 
WHERE
    salary >= 10000 AND salary <= 20000;

或者

SELECT
    last_name,
    salary,
    commission_pct 
FROM
    employees 
WHERE
    salary BETWEEN 10000 AND 20000;
  1. 查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT 
    * 
FROM 
    employees 
WHERE 
    NOT ( department_id >= 90 AND department_id <= 110 ) 
    OR salary > 15000;

或者

SELECT 
    * 
FROM 
    employees 
WHERE 
    NOT ( department_id BETWEEN 90 AND 110) 
    OR salary > 15000;

模糊查询

关键字:LIKE

特点:

  1. 一般和通配符搭配使用

    通配符:

    %:任意多个字符,包含0个字符

    _ :任意单个字符

案例:

  1. 查询员工名中包含字符a的员工信息
SELECT
    *
FROM
    employees
WHERE
    last_name LIKE '%a%';
  1. 查询员工名中第三个字符为m,第五个字符为n的员工名和工资
SELECT
    last_name,
    salary
FROM
    employees
WHERE
    last_name LIKE '__m_n%';
  1. 查询员工名中第二个字符为_的员工名

    如果查询的字符为_,这时就需要转义,可以使用\,可以使用ESCAPE,定义一个转义标识

    ESCAPE:定义转义标识

SELECT
    last_name
FROM
    employees
WHERE
    last_name LIKE '_$_%' ESCAPE '$';

IN

含义:判断某字段的值是否属于IN列表中的某一项

特点:

  1. 使用IN提高语句简洁度
  2. 列表的值类型必须一致或兼容
  3. 列表中不支持通配符

查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个的员工名和工种编号

SELECT
    last_name,
    job_id
FROM
    employees
WHERE 
    job_id IN('IT_PROG', 'AD_VP', 'AD_PRES');

或者

SELECT
    last_name,
    job_id
FROM
    employees
WHERE
    job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';

IS NULL

=或<>不能用于判断null值;IS NULL 或 IS NOT NULL可以判断null值

  1. 查询没有奖金的员工名和奖金率
SELECT
    last_name,
    commission_pct
FROM
    employees
WHERE
    commission_pct IS NULL;
  1. 查询有奖金的员工名和奖金率
SELECT
    last_name,
    commission_pct
FROM
    employees
WHERE
    commission_pct IS NOT NULL;

安全等于<=>

  1. 查询没有奖金的员工名和奖金率
SELECT
    last_name,
    commission_pct
FROM
    employees
WHERE
    commission_pct <=> NULL;
  1. 查询工资为12000的员工信息
SELECT
    *
FROM
    employees
WHERE
    salary <=> 12000;

注意:

IS NULL:仅仅可以判断NULL值,可读性比较高,建议使用

<=>:既可以判断NULL值,又可以判断普通的数据,可读性比较低,不推荐使用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容