• sql语句的基本用法总结


    一、sql语法

    1 select */列名1,列名2... from 表名[连接查询  内连接/左连接 on条件]   必选的
    2 
    3 where  条件 子查询/in/exists/between ... and ..  可选的
    4 
    5 group by 分组列1,分组列2...  可选的
    6 
    7 having 字句 可以对分组结果进行筛选  可选的
    8 
    9 order by 排序列1,排序列2... 可选的

    各个关键字的数据必须要保证

    二、写sql语句的步骤

    1、要先确定从哪个表中查询数据,是要从一个表查询,还是要从多个表查询,如果是多个表必须用连接查询。

    2、确定是否需要分组查询

    3、写where条件

    4、写需要返回的列

    三、连接查询

    连接查询分两类,交叉连接和普通连接查询

    1、交叉连接

    交叉连接可以用逗号分隔多个表,也可以用关键字cross join ,交叉连接返回两个表数据的笛卡尔集。

    2、连接查询

    连接查询分内连接和外连接,外连接有分为左外连接,右外连接,全连接

    最常用的是内连接和左外连接

    内连接返回所有满足连接条件的记录

    select * from 表1 [inner] join  表2 on 表1. 外键=表2.主键

    1 --查询所有有部门的员工的信息
    2 select * from emp e inner join dept d on e.deptno=d.deptno;

    左外连接返回左表的所有数据+右表匹配到的数据,如果左表匹配不到右表的数据,显示为空

    1 --查询所有员工信息,如果员工有部门信息,显示出来,否则不显示
    2 select * from emp e left join dept d on e.deptno=d.deptno;

    右外连接同左外连接

    全连接返回左表的所有数据+ 右表的所有数据,如果匹配不到对方的数据,则显示为空

    1 --查询所有员工和部门信息,如果匹配不到显示为空
    2 select * from emp e full join dept d on e.deptno=d.deptno;

    三、in

    iin用在连接条件中,表示某个字段的值在in提供的列表之中。

    1 select * fromwhere 列名 in (值1,值2...);

    in后还可以是一个子查询,子查询一般会返回多个结果。

    1 举例:查询部门编号在10,20,30之中的用户的信息
    2 select * from emp where deptno in (10,20,30);

    in 和=的区别,in后面可以跟多个值,=后面只能有一个值

    1 举例:查询部门名称为BOSTON或者CHICAGO的员工的信息
    2 select e.* from emp e inner join dept d on e.deptno=d.deptno where d.loc ='BOSTON' or d.loc='CHICAGO'
    3 使用in:
    4 select * from emp where deptno in (select deptno from dept where loc in ('BOSTON','CHICAGO'));

    四、between ... and ...

    一般也用在条件中,between开始值and结束值,开始值和结束值一般是数字,也可以是其他类型(字符串,日期)

    字符串比较和字符串的长度无关,会从第一个字符开始向后比较,如果相同再比较下一个。

    1 举例:查询基本工资在1500到2000之间的员工的信息
    2 select * from emp where sal between 1500 and 2000;
    1 查询 1981年到1998年之间雇佣的员工的信息
    2 --把字符串转换为日期之后再比select * from emp e where e.hiredate between
    3 to_date('1981-01-01','yyyy-mm-dd') and to_date('1998-12-31','yyyy-mm-dd');
    4 --把日期转换为字符串之后再比select * from emp e where to_char(e.hiredate,'yyyy-mm-dd') between
    5 '1981-01-01' and '1998-12-31';

    五、group by

    group by 分组查询

    select 结果列  from 表 where 条件 group  by  列1,列2...

    注意:结果列只能是两种形式:

    1、要么是分组的列

    2、如果要返回其他列,需要对其他列使用聚合函数

    1 举例:统计各部门不同职位的人有多少个
    2 select deptno,job,count(empno) from emp group by deptno,job
    3 select dname,job,count(empno) from emp e inner join dept d on e.deptno=d.deptno
    4 group by e.deptno,dname,job;

    having 子句可以对分组查询的结果进行过滤

    举例:统计各部门不同职位的人有多少个,只显示部门人数大于2的信息 
    1 select dname,job,count(empno) c from emp e inner join dept d on e.deptno=d.deptno
    2 group by e.deptno,dname,job
    3 having count(empno) >2
    4 ;

    六、order by

    order by 排序,可以对多列排序order by 列1 升序/降序,列2 升序/降序 默认是升序asc.

    例子:查询员工信息 按基本工资从大小排列 
    1 --先按员工基本工资倒序,再按奖金倒select * from emp order by sal desc,comm desc;
  • 相关阅读:
    数据库的读读事务也会产生死锁
    数据库中的two phase locking
    排序合并连接(sort merge join)的原理
    SQL Server2016 原生支持JSON
    公司内部培训SQL Server传统索引结构PPT分享
    postgresql的ALTER经常使用操作
    POJ 1458 Common Subsequence(最长公共子序列LCS)
    Docker 1.3 公布
    spring bean之间的关系:继承;依赖
    hdu 1215 七夕节
  • 原文地址:https://www.cnblogs.com/yanpingping/p/10859479.html
Copyright © 2020-2023  润新知