zoukankan      html  css  js  c++  java
  • select 查询

    select 查询

    1、最简单的查询方式

    select * from  emp;

    select empno,ename,sal, from emp;

    2 、使用算法表达式

    select empno, ename,sal, sal*12 +1000 from emp

    3 、使用字段起别名 

     4、distinct  关键字

    去重

    5 、排序

    排序方式包括升序(asc,缺省)和降序(desc)两种

    从低到高(asc默认从低到高)

    从高到低(desc)

    6 、查询条件中 使用逻辑运算符

     7 、分页

    select * from 表名 limit start,count

    第一个数计算:(页数-1)*2  第二个数表示去多少条数据

    SELECT * FROM emp;
    -- 查询指定信息
    SELECT empno,ename,sal FROM emp;
    
    -- 给每个员工加薪 
    SELECT empno,ename,sal*1.5 FROM emp;
    
    SELECT empno,ename,sal*12+1000 FROM emp;
    
    -- 修改列名
    SELECT empno,ename,sal*12+1000 AS '年薪' FROM emp;
    SELECT empno,ename,sal*12+1000 年薪 FROM emp;
    SELECT e.empno,e.ename FROM emp e;
    
    -- distinct 去重
    -- 有什么部门
    SELECT DISTINCT deptno FROM emp;
    -- 查看每个部门有什么职位
    SELECT DISTINCT deptno,job FROM emp;
    
    -- 查看员工,看薪资排序,从低到高 (asc默认)
    SELECT empno,ename,sal FROM emp ORDER BY sal;
    SELECT empno,ename,sal FROM emp ORDER BY sal ASC;
    
    -- 查看员工,看薪资排序,从高到低 (desc)
    SELECT empno,ename,sal FROM emp ORDER BY sal DESC;
    
    -- 查看员工,按部门,薪资排序(低到高)
    SELECT deptno,ename,sal FROM emp ORDER BY deptno,sal;
    
    -- 查看员工,按部门,薪资排序(高到低)
    SELECT deptno,ename,sal FROM emp ORDER BY deptno DESC,sal DESC;
    
    -- 查看员工薪资是5000的员工信息
    SELECT deptno,ename,sal FROM emp WHERE sal=5000;
    
    -- 查看员工薪资是2000到3000之间的员工信息
    SELECT deptno,ename,sal FROM emp WHERE sal>2000 AND sal<3000;
    SELECT deptno,ename,sal FROM emp WHERE sal BETWEEN 2000 AND 3000;
    
    -- 查看在10号部门里的员工薪资是2000到3000之间的员工信息
    SELECT deptno,ename,sal FROM emp WHERE sal>2000 AND sal<3000 AND deptno=10;
    
    -- 查看没有奖金员工
    SELECT deptno,ename,sal,comm FROM emp WHERE comm IS NULL OR comm=0;
    
    -- 查看分页  第一个数计算:(页数-1)*2  第二个数表示去多少条数据
    SELECT * FROM emp LIMIT 6,3;
    SELECT * FROM emp LIMIT 0,2;
    SELECT * FROM emp LIMIT 2,2;
    View Code

    函数

    1、count()

    count(*)表示计算总行数,括号中写星与列名,结果是相同的

    2 、max()     max(列)表示求此列的最大值

    3 、min()      min(列)表示求此列的最小值

    4 、sum()     sum(列)表示求此列的和

    5 、avg()       avg(列)表示求此列的平均值

    6 、concat()   拼接字符串concat(str1,str2...)

    7、length()   包含字符个数length(str)

    8 、截取字符串

    left(str,len) 返回字符串str的左端len个字符

    right(str,len) 返回字符串str的右端len个字符

    substring(str,pos,len) 返回字符串str的位置pos起len个字符

    (第一个是字符串   第二个是起始位置,第三个是截取长度)

     

    9 、replace()  替换字符串replace(str,from_str,to_str)

    10 、时间与日期

    year(date) 返回date的年份(范围在1000到9999)

    month(date) 返回date中的月份数值

    day(date) 返回date中的日期数值

    hour(time) 返回time的小时数(范围是0到23)

    minute(time) 返回time的分钟数(范围是0到59)

    second(time) 返回time的秒数(范围是0到59)

    日期计算

    使用+-运算符,数字后面的关键字为year、month、day、hour、minute、second

    日期格式化

    select date_format('2016-12-21','%Y %m %d');
    其他:

    当前日期 current_date()    

    当前时间 current_time()

    当前日期时间now()

    -- 查看有多少员工
    SELECT COUNT(*) FROM emp;
    SELECT COUNT(deptno) FROM emp;
    SELECT COUNT(1) FROM emp;
    
    
    -- 查看员工的总薪资
    SELECT SUM(sal) FROM emp;
    
    -- 查看员工的最高薪资
    SELECT MAX(sal) FROM emp;
    
    -- 查看员工的最低薪资
    SELECT MIN(sal) FROM emp;
    
    -- 查看员工的平均薪资
    SELECT AVG(sal) FROM emp;
    
    -- 查询员工的总薪资,最高薪资,最低薪资,平均薪资
    SELECT SUM(sal),MAX(sal),MIN(sal),AVG(sal) FROM emp;
    
    
    -- 给员工薪资加上计量单位('美金')
    SELECT empno, ename,CONCAT(sal,'美元','')FROM emp;
    
    -- 查询员工的姓名长度
    SELECT LENGTH(ename) FROM emp;
    
    -- 查询员工的姓名起始字母
    SELECT SUBSTRING(ename,1,3)FROM emp;
    
    
    INSERT INTO emp (empno,ename) VALUES('8888','  laoda');
    -- 用replace把空格去掉
    SELECT REPLACE(ename,' ','')FROM emp WHERE empno='8888';
    -- 把l改成x
    SELECT REPLACE(ename,'l','x')FROM emp WHERE empno='8888';
    
    SELECT YEAR('2018-2-28');
    
    -- 查看emp表员工入职的年份 
    SELECT empno,ename,YEAR(hiredate) FROM emp;
    
    -- 增加时间1个月
    SELECT '2017-12-28'+INTERVAL 1 MONTH;
    
    -- 修改emp表员工入职时间的显示方式为yyyy年MM月dd日
    SELECT empno,ename,DATE_FORMAT(hiredate,'%Y年%m月%d日') FROM emp;
    
    -- 获取当前日期
    SELECT CURRENT_DATE();
    -- 获取当前时间
    SELECT CURRENT_TIME();
    -- 获取当前的日期和时间
    SELECT NOW();
    View Code

    分组查询与过滤

    group by 分组

    语法格式

    select column, group_function(column)
        from table
        [where condition]
        [group by group_by_expression]
        [order by column];

    eg:

    having 过滤

    对分组查询的结果进行过滤,要使用having 从句

    having从句过滤分组后的结果,它只能出现在group by从句之后,而where从句要出现在group by从句之前

    where过滤行,having过滤分组

    执行过程:

    from-- where -- group by– having– select-- order by

    就是先from 去哪个表里去查 -- 在用where过滤出符合条件的 -- group by在分组  --在having过滤掉分组后的数据  -- 然后select查出来 -- 最后order by 排序

    eg:

    -- 分组
    -- 查看有多少个部门  group by 可以用来去重
    SELECT deptno FROM emp GROUP BY deptno;
    
    -- 每个部门每个月发多少薪资
    SELECT SUM(sal) FROM emp GROUP BY deptno;
    SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
    
    -- 每个部门的总薪资,最小薪资,最高薪资,平均薪资 
    SELECT deptno,SUM(sal),MIN(sal),MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
    
    -- 每个部门的总薪资,最小薪资,最高薪资,平均薪资 ,但是不统计10号部门,升序显示
    SELECT deptno,SUM(sal),MIN(sal),MAX(sal),AVG(sal) FROM emp WHERE deptno != 10 GROUP BY deptno ORDER BY deptno DESC;
    
    
    -- 每个部门的总薪资,最小薪资,最高薪资,平均薪资 ,不统计平均2000以下的
    SELECT deptno,SUM(sal),MIN(sal),MAX(sal),AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal)>=2000;
    
    -- 在emp表中,列出工资最小值小于2000的职位
    SELECT job,MIN(sal) FROM emp GROUP BY sal HAVING MIN(sal)<2000;
    
    -- 统计人数小于4的部门的平均工资
    SELECT deptno,AVG(sal) FROM emp GROUP BY deptno HAVING COUNT(1)<4;
    
    -- 统计各部门的最高工资,排除最高工资小于3000的部门
    SELECT deptno, MAX(sal) FROM emp GROUP BY deptno HAVING MAX(sal)<3000;
    View Code

    约束

    表的约束

    约束类型说明
    主键约束(Primary Key) 要求主键列数据唯一,并且不允许为空。主键可以包含表的一列或多列,如果包含表的多列,则需要在表级定义。
    唯一约束(Unique) 要求该列唯一,允许为空
    检查约束(Check) 某列取值范围限制、格式限制等,如年龄的约束
    非空约束(not null) 某类内容不能为空
    外键约束(Foreign Key) 用于两表间建立关系,需要指定引用主表的那列。外键通常用来约束两个表之间的数据关系,定义外键的那张表称为子表,另一张表称为主表。 在表的创建过程中,应该先创建主表,后创建子表。
    主键的约束:
    主键约束是数据库中最重要的一种约束。在关系中,主键值不可为空,也不允许出现重复,即关系要满足实体完整性规则
    • 主键从功能上看相当于非空且唯一

    • 一个表中只允许一个主键

    • 主键是表中能够唯一确定一个行数据的字段

    • 主键字段可以是单字段或者是多字段的组合

    主键创建的两种方式:
    -- 主键  创建方式1
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(10)
    );
    -- 主键  创建方式二
    CREATE TABLE  t_user(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(10),
    PRIMARY KEY(id)
    );

    唯一约束创建的3种方式:

    -- 唯一约束  创1
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(10) UNIQUE,
    PRIMARY KEY(id)
    );
    
    -- 唯一约束  创2
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(10),
    PRIMARY KEY(id),
    UNIQUE(NAME)
    );
    
    -- 唯一约束  创3
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(10),
    PRIMARY KEY(id),
    CONSTRAINT uk_name UNIQUE(NAME)
    );

    注:auto_increment  自增  设置后会自动按顺序增加

    外键创建的两种方式:

    -- 外键的使用
    -- 准备工作
    CREATE TABLE t_sex(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(2)
    )
    
    USE test2;
    -- 外键的创建1
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(10),
    sex INT(11),
    FOREIGN KEY (sex) REFERENCES t_sex(id)
    );
    
    -- 外键创建2
    CREATE TABLE t_user(
    id INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(10),
    sex INT(11),
    CONSTRAINT fk_sex_sex_id FOREIGN KEY (sex) REFERENCES t_sex(id)
    );

    约束:

     修改表的约束:(下面的那个是修改约束名)

     

    删除约束:(drop 约束类型 约束名

     

    索引

    • 创建索引的目的是为了查询速度更快

    创建索引:

    • CREATE INDEX index_name   ON table (column[, column]...);

    create index 索引名 on 表名(要添加索引的列)

     

    删除索引的两种方式:

     

    视图:

    • 视图就是构造出来的一个虚表

    视图功能:方便保护隐私

    视图的创建和查询:

    创建:(as后紧跟查询语句 创建一个后面查询内容的视图

     

    增加数据:

     

     删除视图:

    drop view 视图名;

     


  • 相关阅读:
    用指针写线段树(维护乘法)
    费用流——网络流板子
    最小割板子题——[USACO5.4]奶牛的电信
    数论——置换
    NOIP2012 借教室
    POJ1990 moofest
    POJ2352 star
    POJ2299 Ultra-QuickSort
    CF498D Traffic Jams in the land
    POJ2828 Buy Ticket
  • 原文地址:https://www.cnblogs.com/whm1012/p/8486549.html
Copyright © 2011-2022 走看看