sql基础

--单表查询
select * from student;
select * from score; --投影查询
select * from student; --条件查询
select * from student
where sno=001 or sno=004 ; --查询001 和004两条记录
select * from student
where sno in (001,004); --查询001~004之间的记录
select * from student
where sno between 001 and 004;

      注意in 和between and 的用法。

--模糊查询
select * from student
where name like '_五%';

    _ 表示有且仅有一个字符,而%表示有0~无穷大个字符。   这里特别注意,name列使用char(10)类型的,而这里记录比如name=“王五” 两个汉字代表4个字符,那么剩下的6个字符会变成空格放在值的后面,而此时'_五%'不能用'_五' 来查询,因为‘五’的后面还有空格.

  • order by 用法如下,company的值可能相同,如果company相同的数据以orderNumber升序排列

    



聚合函数

  • 聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?
    1. AVG 返回指定组中的平均值,空值被忽略。
    例:select prd_no,avg(qty) from sales group by prd_no

    2. COUNT 返回指定组中项目的数量。
    例:select count(prd_no) from sales

    3. MAX 返回指定数据的最大值。
    例:select prd_no,max(qty) from sales group by prd_no

    4. MIN 返回指定数据的最小值。
    例:select prd_no,min(qty) from sales group by prd_no

    5. SUM 返回指定数据的和,只能用于数字列,空值被忽略。
    例:select prd_no,sum(qty) from sales group by prd_no

  • gourp by的使用 : 先分组后在执行聚合函数。
      • select avg(sal) as 平均工资
        from emp
        group by deptno
        having avg(sal)>2000

          需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

          group by后面不能跟where 只能跟having

  • truncate table  tablename 删除表,不记录日志文件,删除后不能恢复,而delete table tablename 删除表,记录文件,可恢复。

  truncate删除数据速度很快。

  • --删除重复数据
    select distinct deptno from emp;

  • 1. union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

    2. union All:对两个结果集进行并集操作,包括重复行,不进行排序;

    3. intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

    4. minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

select sal as 平均工资
from emp
where sal>3000 union All
select sal as 平均工资
from emp
where sal<1000;

结果:




多表查询

--多表查询
select dept.loc,emp.job
from dept,emp
where dept.deptno=emp.deptno;

    如果多个表中有列名相同的列,那么必须指定哪张表 ,例dept.loc。  这种方式仅适用于数据量小的,因为这种查询先执行select dept.loc,emp.job from dept,emp ,数据量相当于把两个表的数据量相乘形成笛卡尔积,然后再根据where条件筛选。数据量比较大的时候一般用连接查询:

    连接查询:1.内连接:对等连接和不对等连接

         2.外连接:左外连接和右外连接

         3.cross连接(交叉连接)

          4.全外连接

         5.子查询:相关子查询、嵌套子查询、多列子查询

--对等连接
--查询员工号、姓名、薪水、工作所在地
select empno,ename,sal,loc
from emp
inner join dept on dept.deptno=emp.deptno

    on相当于where 后跟条件。

--不对等连接
--查询员工号、姓名、薪水、薪水等级
select empno,ename,sal,grade
from emp
inner join salgrade on emp.sal between salgrade.losal and salgrade.hisal;

    先把emp表的empno,ename,sal数据列出来,然后找sal值在losal和hisal之间的grade连接起来。

  • 左外/右外连接:

两个表:
A(id,name)
数据:(1,张三)(2,李四)(3,王五)
B(id,name)
数据:(1,学生)(2,老师)(4,校长)

左连接结果:
select A.*,B.*

from A

left join B on A.id=B.id;

1 张三 1 学生
2 李四 2 老师
3 王五 NULL NULL

右链接结果:
select A.*,B.*

from A

right join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
NULL NULL 4 校长

****************

左外连接:以左边表为基准表,无条件列出本表数据,右表数据如果跟左边一样的补在左表后面,不一样的留空。

补充:下面这种情况就会用到外连接
比如有两个表一个是用户表,一个是交易记录表,如果我要查询每个用户的交易记录就要用到左外外连接,因为不是每个用户都有交易记录。
用到左外连接后,有交易记录的信息就会显示,没有的就显示NULL,就像上面我举得例子一样。
如果不用外连接的话,比如【王五】没有交易记录的话,那么用户表里的【王五】的信息就不会显示,就失去了查询所有用户交易记录的意义了。

--cross连接
select t1.*,t2.*
from t1,t2

    返回被连接的两个表所有数据行的笛卡尔积,返回到的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

  • 全外连接:以两个表为基准表。

  • 嵌套子查询:子查询的结果可以独立运行
--查询低于公司平均工资的员工信息
--嵌套子查询
select * from emp
where sal<(
select avg(sal) from emp
);
  • 相关子查询:子查询不能独立运行。
--查询各个部门中,哪些员工的工资低于所在部门的平均工资
select * from emp out_emp
where sal<(
select avg(sal)
from emp in_emp
where in_emp.deptno=out_emp.deptno
)


 序列

CREATE SEQUENCE sequence  //创建序列名称

       [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

       [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循环/不循环

       [{CACHE n | NOCACHE}];//分配并存入到内存中

create table score(
id int primary key,
math int,
chinese int
); create sequence se_score
start with 1
increment by 1 insert into score values(se_score.nextval,90,80);


视图

  • 用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下:
    通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制
    隐藏数据复杂性。
create view v_emp
as
select *
from emp select * from v_emp;

(二十)sql基础的更多相关文章

  1. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  2. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十║Vue基础终篇:传值+组件+项目说明

    缘起 新的一天又开始啦,大家也应该看到我的标题了,是滴,Vue基础基本就到这里了,咱们回头看看这一路,如果你都看了,并且都会写了,那么现在你就可以自己写一个Demo了,如果再了解一点路由,ajax请求 ...

  3. SQL学习(二)SQL基础的增删改查

    在测试时使用数据库时,用的比较多的就是增删改查SQL了. 一.增加(insert into ...values) 用于向表中插入新记录 1.不指定列(表示:依次插入所有列的值) insert into ...

  4. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录

    壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...

  5. Oracle学习(一)SQL基础

    一.认识SQL SQL是什么? SQL,结构化查询语言,全称是 Structured Query Language. SQL 是一门 ANSI(American National Standards ...

  6. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  7. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  8. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  9. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

随机推荐

  1. Select count(*)和Count(1)的区别和执行方式

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常 ...

  2. prometheus-alertmanager告警推送到钉钉

    1. Prometheus告警简介 告警能力在Prometheus的架构中被划分成两个独立的部分.如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性 ...

  3. Codeforces Round #532 (Div. 2) E. Andrew and Taxi(二分+拓扑排序)

    题目链接:https://codeforces.com/contest/1100/problem/E 题意:给出 n 个点 m 条边的有向图,要翻转一些边,使得有向图中不存在环,问翻转的边中最大权值最 ...

  4. Liunx - 命令整理

    ## Liunx 常用命令 ## ## 注意,在Linux中,文件没有创建时间. 1. ls : 查看当前文件夹下的所有文件 2. mkdir -- 创建一个新的文件夹 - mkdir 参数 文件名 ...

  5. UVALive-7040-Color(容斥原理)

    链接: https://vjudge.net/problem/UVALive-7040 题意: Recently, Mr. Big recieved n owers from his fans. He ...

  6. 通用分页jsp页面显示

    注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html  的基础上进行改进,所以有许多的类都在上一篇, 带来不便 ...

  7. jQuery事件触发前后进行其他的操作

    <!-- 事件触发前后执行其他操作的三种方式: 多适用于:公众号的订阅,有订阅的可以收到文章,没有订阅的收不到文章. --> <!DOCTYPE html> <html ...

  8. java 设计模式 --委派模式

    委派模式(Delegate)原理: 类B和类A是两个互相没有任何关系的类,但是B具有和A一模一样的方法和属性:并且调用B中的方法/属性就是调用A中同名的方法和属性. B好像就是一个受A授权委托的中介, ...

  9. javacv开发详解之1:调用本机摄像头视频

    前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用 ...

  10. div与div之间有空隙

    当你使用HTML div块与块的中间不能紧密连接  怎么都解决不了时 使用前效果图 可以在<head></head>中间内容里加一个 * { margin:0; padding ...