SQL003 数据库整理笔记 (3)where子句

139 阅读3分钟

3. where 子句

3.1 Where子句的作用

* 限制表中的行数据的返回,符合where条件的数据就返回,不符合数据被过滤掉。
  • 两个极端条件
    • 1 = 1 恒真
    • 1 != 1 恒假
-- 和不写where子句是一样的 
SQL> select salary from s_emp where 1 = 1;

-- 什么都查不到
SQL> select salary from s_emp where 1 != 1;

3.2 数字类型数据的条件判断

  • (大于) <(大于) <=(小于等于) >=(大于等于) `

  • =(等于)
  • <> != ()

注意:SQL中使用 = 来比较是否相等,不是==

-- 把s_emp中的 id salary 显示出来, 要求salary大于1200
SQL> SELECT id, salary FROM s_emp WHERE salary > 1200;

-- 把s_emp中的 id salary 显示出来, 要求salary等于1200
SQL> SELECT id, salary FROM s_emp WHERE salary = 1200;

3.3 字符串类型的条件判断

  • SQL语句不区分大小写,字符串的值是匹分大小写
  • 字符串的值要加单引号
  • 字符串使用 = 来判断
-- 找出first_name是Mark的id, first_name, salary 显示出来
SQL> SELECT id, first_name, salary FROM s_emp WHERE first_name = 'Mark';

3.4 between and 运算符

  • where字段 between a and b 表达一个闭区间,它等价于 x >= a 且 x <=b,它是一个闭区间的运算符
-- 找出工资在[1200, 1400]范围内的员工 id, first_name, salary;
SQL> SELECT id, first_name, salary FROM s_emp WHERE salary >= 1200 AND salary <= 1400;
SQL> SELECT id, first_name, salary FROM s_emp WHERE salary BETWEEN 1200 AND 1400;

3.5 in 运算符

  • 判断字段是否在存在于值列表中
  • where 字段 in (值1, 值2, 值3, ...)
-- 查询s_emp表中部门编号是31、32或者50的id、first_nme 以及manager_id
SQL> SELECT id, first_name, dept_id, manager_id FROM s_emp WHERE dept_id IN (31, 32, 50);

3.6 模糊查询 like

  • 通配符
    • _表示单个字符
    • %表示多个字符
-- 找出名字中first_name包含a的员工
SQL> SELECT id, first_name FROM s_emp WHERE first_name LIKE '%a%';

-- 找出名字中first_name第二个字符为a的员工
SQL> SELECT id, first_name FROM s_emp WHERE first_name LIKE '_a%';
  • 转义字符 (有区别)
-- 找出所有的s开头的表名
-- oracle 实现
SQL> SELECT table_name FROM user_tables WHERE table_name LIKE 's%';

-- mysql 实现
SQL> SELECT table_name FROM information_schema.tables WHERE table_name LIKE 's%';

-- 找出所有的s_开头的表名, 这里要原本输出 _  这个字符
-- oracle 实现
SQL> SELECT table_name FROM user_tables WHERE table_name LIKE 's\_%' ESCAPE '\';

-- mysql实现
SQL> SELECT table_name FROM information_schema.tables WHERE table_name LIKE 's\_%';

3.7 NULL的判断

  • 使用 where 字段 is null 来判断 是否为空,而不是 =
-- 找出提成是10的id, first_name 和 commission_pct
SQL> SELECT id, first_name, commission_pct FROM s_emp WHERE commission_pct = 10;

-- 找出提成不是10的id, first_name 和 commission_pct (null未处理)
SQL> SELECT id, first_name, commission_pct FROM s_emp WHERE commission_pct != 10;

-- 找出提成是null的员工 (加上上面不是10的刚好)
SQL> SELECT id, first_name, commission_pct FROM s_emp WHERE commission_pct IS NULL;

3.8 逻辑运算符

  • and 连接的条件都为真 则条件为真。
  • or 只要有一个条件为真,则条件为真。
  • not 求反
    • = 的求反是 != <> ^=
    • between and 对 not between and
    • in 对应 not in (注意空值)
    • like 对应 not like
    • is null 对应 is not null (特别注意)
-- 求工资在[800, 1200]的员工列出id, salary, first_name;
SQL> SELECT id, first_name, salary FROM s_emp WHERE salary >= 800 AND salary <= 1200;

-- 求部门编号在31,32或50的的id, first_name, dept_id;
SQL>  SELECT id, first_name, dept_id FROM s_emp WHERE dept_id = 31 OR dept_id = 32 OR dept_id = 50;

-- 找出提成不同NULL的员工的id, first_name, commission_pct;
SQL> SELECT id, first_name, commission_pct FROM s_emp WHERE commission_pct IS NOT NULL;