DMSQL
DMSQL 基于sql92 ,部分基于sql99
SQL:结构化的查询语言。
DDL:定义 create drop alter truncate
DML:管理 select update delete insert
DCL:控制 grant revoke
TCL:事务控制:commit rollback
Select
语法:select () from ()
第一个括号:*,column_name,alias,expr || distinct
第二个括号:table_name
Select * from city;
Select city_name,city_id from city;
Select city_name cn from dmhr.city
SQL> select employee_name||'的工资是:'||salary as desc1 from dmhr.employee limit 10;
SQL> select distinct department_id from dmhr.employee;
Where 子句常用的查询条件由谓词和逻辑运算符组成,谓词指一个条件,结果为一个布尔值,真,假或是未知。
逻辑运算符:and or not
谓词 包括比较谓词(= > < ,>=,<=,<>),between ,in,like null exists
Like %,_
SQL> select employee_name,salary from dmhr.employee where employee_name like '马%';
SQL> select employee_name,salary from dmhr.employee where salary between 20000 and 30000;
SQL> select employee_name,salary from dmhr.employee where salary>=20000 and salary<=30000;
集函数:
分析函数
引入分析函数后,只需要简单的sql语句,就能实现功能,并且在执行效率方面也有大幅提高。
分析函数
var_pop,var_samp,variance,stddev_pop,stddev_samp,stddev
percent_rank,cume_dist,rtio_to_report,percentile_cont,
Desc 降序,asc升序
SQL> select employee_name,salary from dmhr.employee order by salary desc;
语法:select()from () join() on()
第三个括号:表名
第四个括号:关联字段
SQL> select e.employee_name,d.department_name from dmhr.employee e join dmhr.department d using(department_id) limit 10;
SQL>select e.employee_name,d.department_name from
dmhr.employee e join dmhr.department d on
e.department_id=d.department_id limit 10;
外连接:
左外连接:
把写在left join左边的全部显示,右边的只显示满足条件的,不满足条件的用null代替。
SQL> select e.employee_name,d.department_name from test2.emp e left join test2.dep d on e.department_id=d.department_id limit 10;
右外连接:
把写在right join右边的全部显示出来,左边的只显示满足条件,不满条件的,用null代替。
SQL> select e.employee_name,d.department_name from test2.emp e right join test2.dep d on e.department_id=d.department_id limit 10;
全外连接:返回所有的记录,包括不满足条件的。
SQL> select e.employee_name,d.department_name from test2.emp e full join test2.dep d on e.department_id=d.department_id limit 10;
全外连接=左外连接 union 右外连接
语法:select 聚合函数() from () group by () having()
Sum avg max min count
算出各个部门的平均工资?并且将部门平均工资大于10000的找出来。
SQL> select avg(salary) from dmhr.employee group by department_id having avg(salary)>10000;
子查询的结果是主查询的条件,子查询先于主查询运行。
返回值是唯一的:
Select () from () where () =(子查询结果)
SQL> select employee_name,department_id from dmhr.employee where department_id=(select department_id from dmhr.employee where employee_name='马学铭');
返回值是多行的:
语法:select () from () where ()>|any|all (子查询结果)
ALL: >ALL(MAX) ANY: >ANY(MIN) 找出比1005部门工资都高的人。 SQL> select employee_name,department_id,salary from dmhr.employee where salary >all(select salary from dmhr.employee where department_id=1005); 找出比1005部门任意一人工资高的人。 SQL> select employee_name,department_id,salary from dmhr.employee where salary >any(select salary from dmhr.employee where department_id=1005); SQL> select employee_name, salary from dmhr.employee where employee_name in ('戴明','沈连连','常玲'); IN:把子查询运行完,再运行主查询。 Exsits: 先运行子查询,如果有满足条件的,再运行主查询。