SQL002 数据库整理笔记 (2)from子句

143 阅读3分钟

所有的操作,先从查询开始。

1. 查看表结构

SQL> desc 表名;

-- 查看员工表的结构
SQL> desc s_emp;
  • 可以看到表中的字段名称,字段的数据类型,字段值。

2. from 子句

2.1 如何从表中查询一个字段的值

SQL> SELECT 字段名 FROM 表名;
	
-- 练习:查询s_emp表中所有的ID
SQL> select id from s_emp;

2.2 如何从表中查询多个字段的值

SQL> SELECT 字段名1, 字段名2, ... 字段名n FROM 表名;

-- 练习: 查询s_emp表中所有的id,first_name, salary。
SQL> SELECT id, first_name, salary FROM s_emp;

2.3 查询所有字段

 SQL> SELECT 所有的字段名用逗号分开 FROM 表名; 
 SQL> select * from 表名; -- (这种方式只用于测试, 效率差)
 
 -- 练习
 SQL > SELECT * FROM s_emp;

2.4 sql中的数学运算

  • 四则运算 + - * /
  • oracle中的取余是用函数MOD(被除数,除数)来实现的,%有特殊含义,用来做通配符。
  • mysql中除了MOD函数,直接支持了 % 运算符。
-- 练习 将每个员工的月薪和年薪(按13个月)显示出来
SQL> SELECT salary, salary * (12 + 1) FROM s_emp;

-- oracle 计算余数
SQL> SELECT MOD(10, 3) FROM dual; -- 1

-- mysql 取查
SQL> SELECT MOD(10, 3) from dual; -- 1
SQL> SELECT -15 % 6 FROM DUAL; -- -3

2.5 空值 的处理

  • 任何值和NULL做运算结果都是NULL,空值要尽早处理
-- 计算每个人的提成
SQL> SELECT salary, salary * (1 + commission_pct) FROM s_emp; 
  • oracle中如何处理NULL值
    • nvl(par1, par2) NULL值处理函数
    • par1如果为NULL,返回par2的值。
    • par1如果不为NULL,就返回par1的值。
-- 查询s_emp中的id, first_name, manager_id 如果 manager_id为NULL,则显示成-1。
SQL> SELECT id, first_name, nvl(manager_id, -1) FROM s_emp;
  • mysql与之对应的是coalesce()函数
SQL> SELECT id, first_name, COALESCE(manager_id, -1) FROM s_emp;

2.6 字段或者表达式的别名

  • 语法就是在字段或者表达式后面另起一个名字,用空格或as连接。
  • 注意:别名只能有一个
  • oracle 别名默处理成大写,使用双引号可以将多个对象看成一个整体,可以使别名原样显示。
  • mysql 的别名默认会原样输出,也可以使用双引号或反引号来将多个对象看成一个整体,可以原样显示。
-- mysql和oracle都可以
SQL> SELECT salary "yue Xing" FROM s_emp;

-- mysql
SQL> SELECT salary `yue Xing` FROM s_emp;

2.7 SQL中的字符串

  • SQL中使用单引号表示字符串
    • '' ' ' '@' 'hello sql'
  • Oracle中使用字符串拼接符 ||来拼接字符串
-- 将名称拼接起来
SQL> SELECT first_name ||  '_' || last_name FROM s_emp;
  • mysql中使用 CONCAT () 函数来拼接多个字符串,作用和||相同,但是要注意,虽然oracle中有相同的函数,但oracle中的concat不能连接拼接多个,只能两两拼接。
-- oracle中的cancat不能这么用
SQL> SELECT CONCAT(first_name, '_', last_name) FROM s_emp;
  • 转义字符
    • 使用单引号来转义
-- oracle

-- 如何在first_name和last_name之间拼接一个单引号

/* 两端的单引号表示是一个字符串,左边第二个单引号是转义的意义,第三个单引号才是单引号。 */
SQL> SELECT first_name || '''' || last_name FROM s_emp;

-- 练习: 拼接两个单引号
SQL> SELECT first_name || '''' || '''' || last_name FROM s_emp;
SQL> SELECT first_name || '''''' || last_name FROM s_emp;

-- mysql只是换了运算符函数,转义是一样的。
SQL> SELECT CONCAT(first_name, '''', last_name) FROM s_emp;
SQL> SELECT CONCAT(first_name, '''', '''',last_name) FROM s_emp;
SQL> SELECT CONCAT(first_name, '''''', last_name) FROM s_emp;

2.8 数据的排重显示 (distinct)

  • 相同内容只显示一次,且distinct在sql语句中只显示一次。
-- 单字段排重
SQL> select distinct salary from s_emp; -- 18个结果

-- 多字段排重
SQL> SELECT DISTINCT salary, title FROM s_emp;