精华内容
下载资源
问答
  • 数据库查询

    2012-09-04 23:46:15
    SELECT :DISTINCT(去除重复字段) FROM WHERE ...:返回两个日期之间由指定元素表示的间隔,如天数,分钟数,秒数等。 日期转换为字符串:SELECTT DATE=DATENAME(MONTH,DATE) FROM ; 

    SELECT:DISTINCT(去除重复字段)

    FROM

    WHERE

    ORDER BY:ASC(升序排序,默认方式)  DESC(降序)

    练习:

    编写一个SQL语句,在NAME1表中返回姓名,年龄(大到小),且要求性别是女生。

     

    SELECT   NAME, AGE

    FROM NAME1

    WHERE SEX='女生'

    ORDER BY AGE DESC;

    操作符

    比较操作符:= , <> , < ,  >

    逻辑操作符:is null,between,in ,like,exists,unique

    求反操作符:<>,not between,not in,not like,is not null,not exsits

    算数操作符:+,-,*,/

    练习1:

    编写一个SELECT 语句,从表PRODUCT返回以下信息:产品描述,产品价格,每个产品5%的销售税。产品列表价格从高到低排列。

    SELECT MIAOSHU,COST,COST*0.05

    FROM PRODUCT

    ORDER BY COST DESC;

     

    练习2:

    编写一个查询,返回所有名称以P开头产品的记录。在编写一个查询返回所有名称不以P开头的产品记录。

    SELECT *

    FROM PRODUCT

    WHERE MIAOSHU LIKE('p%');

    select *

    from product

    where miaoshu not like ('P%');

     

    汇总查询

    COUNT (*)|DISTINCT|ALL:统计不包含NULL值得记录或字段值

                                         (*):统计表里全部记录包括重复的。

                                          DISTINCT (count name):统计表里不重复的记录。

                                         ALL:默认方式与DISTINCT相反。

    SUM:返回一组记录中某个字段值的总和。(必须是数值型字符)

    AVG:返回指定记录的平均值。(必须是数值型字符)

    MAX:返回记录中某个字段的最大值

    MIN:返回记录中某个字段的最小值

     

    数据排序和分组

    数据分组:按照逻辑次序把具有重复值的字段进行合并。

    GROUP BY分组函数位置:

    SELECT

    FROM

    WHERE

    GROUP BY

    ORDER BY

    HAVING自居字句在查询中的位置:是GROUP BY 字句的扩充,对于用户分组添加条件

    SELECT

    FROM

    WHERE

    GROUP BY

    HAVING

    ORDER BY

     

    字符函数

    字符函数主要用于对字段里的字符串或值进行比较,链接,搜索,提取片段等。

    1. 串接函数+
    2. TRANSLATE函数:搜索字符串里的字符并查找 特定字符,标记找到的位置,然后用替代字符串里对应的字符替代它。
    3. REPLACE函数:把某个字符或者字符串替代为制定的字符或者多个字符。
    4. UPPER函数:把字符串里的小写字母转成大写字母
    5. LOWER函数:把字符串里的大写字母转成小写字母
    6. SUBSTR函数:获取字符串子串的函数。
    7. INSTR函数:在字符串中寻找指定字符集,并返回其所在的位置。
    8. LTRIM函数:从左边剪除字符串里的字符。
    9. RTRIM函数:从右边剪除字符串里的字符。
    10. LENGTH函数:得到字符串,日期,数字或者表达式的长度,单位是字节。
    11. IFNULL函数:在一个表达式是NULL时从另一个表达式获得值。
    12. COALESCE函数:指定替代NULL值,可以接受一个数据集。
    13. SCII函数:返回字符串最左边字符的ASCII码。

    算数函数是对数据库里的值根据运算符进行运算。

    1. ABS(绝对值);
    2. ROUND(舍人);
    3. SQRT(平方根);
    4. SIGN(符号);
    5. POWER(幂);
    6. CELL,FLOOR(上限,下线);
    7. EXP(指数);
    8. SIN,COS,TAN(正弦,余弦,且);

    转换函数把数据类型从一种转换成另一种。

    1. 字符到数字:
    2. 数字到字符串:SELECT A=a,NEW_A=STR(a)   FROM      WHERE a IS NOT NULL;
    3. 字符到日期;
    4. 日期到字符;

     

    日期和时间

    日期和时间(DATETIME)存储的标准有三种:

    1. DATE:直接存储日期。YYYY-MM-DD
    2. TIME:直接存储时间。HH:MM:SS.nn
    3. TIMESTAMP:直接存储日期和时间。YYYY-MM-DD HH:MM:SS.nn

    日期函数

    当前日期:GETDATE()

       SELECT GETDATE()

    时间和日期相加:

       SELECT DATE DATEADD(MONTH,1,DATE) FROM   ; 月份加一

    DATEPART:返回日期某个元素的整数值。

    DATENAME:返回日期某个元素的文本值。

    DATEDIFF:返回两个日期之间由指定元素表示的间隔,如天数,分钟数,秒数等。

    日期转换为字符串:SELECTT DATE=DATENAME(MONTH,DATE) FROM      ; 

    展开全文
  • 数据库查询语句sql

    千次阅读 2018-04-06 22:23:34
    数据库查询语句sqlSELECT * FROM emp;SELECT * FROM dept;--数据库语句中分号是分隔符,系统遇到分号才会执行语句--单行注释/*多行注释*//*select 列1,列2 ,……列n --定义查询数据所在的列from 表1,表2 ,……...

                                数据库查询语句sql

    SELECT * FROM emp;
    SELECT * FROM dept;
    --数据库语句中分号是分隔符,系统遇到分号才会执行语句
    --单行注释
    /*
    多行注释
    */
    /*
    select 列1,列2 ,……列n    --定义查询数据所在的列
    from 表1,表2 ,……表n     --定义查询数据所在的表
    where 限定条件1 and/or 限定条件2 …… 限定条件n     --定义查询数据的限定条件
    group by 列 1,列 2 ,……列 n    --定义查询数据的分组方式
    having 分组函数条件 1 and/or 分组函数条件2 ……     --定义查询数据分组函数的限定条件
    order by 列1 [asc/desc] ,列2 [asc/desc] ,…… 列n [asc/desc]     --定义查询结果的排序方式
    */
    第二章 sql基础
    1.*表示所有列
    SELECT * FROM emp;
    --* 会降低查询效率,尽量避免使用
    2.选择指定的列
    SELECT ename,job,sal,deptno FROM emp;
    3.对查询结果进行运算
    SELECT ename,job,sal,12*sal FROM emp;
    --对日期格式的数据可以做加减运算,表示加上或减去天数
    SELECT ename,hiredate,hiredate+365 FROM emp;
    --sysdate 表示当前系统时间
    SELECT ename,hiredate,(SYSDATE-hiredate)/365,SYSDATE-30 FROM emp;
    4.空值
    --当空值参与运算时,得到的结果也是空值
    SELECT ename,sal,comm,12*(sal+comm) FROM emp;
    5.列的别名
    /*
    select 列名1 别名,列名2 别名 ……
    select 列名1 as 别名,列名2 as 别名 ……
    如果别名区分大小写或者包含特殊字符,使用双引号定义别名
    select 列名1 “别名”,列名2 “别名” ……
    */
    SELECT ename xingming,job zhiwei,deptno FROM emp;
    --别名通常用来给计算结果加以说明
    SELECT ename,sal,comm,12*(sal+comm) nianxin FROM emp;
    SELECT ename,sal,comm,12*(sal+comm) "nian xin" FROM emp;
    --双引号只出现在列的别名中,在 sql 语句中其他任何地方都不会再出现双引号
    6.连接符||
    SELECT ename||job FROM emp;
    7.字符串
    SELECT 50,SYSDATE,'I am the king' FROM emp;
    --字符串必须加单引号
    SELECT 'ename',job FROM emp;
    SELECT ename||' is a '||job FROM emp;
    8.重记录
    SELECT deptno FROM emp;
    --去重 distinct
    SELECT DISTINCT deptno FROM emp;
    SELECT DISTINCT job FROM emp;
    --普通列不能和去重列一起查询
    --SELECT ename,DISTINCT job FROM emp;
    --多列去重
    SELECT DISTINCT deptno,job FROM emp;

    第三章 限定和排序
    1.where 字句
    SELECT ename,job,sal,deptno FROM emp
    WHERE deptno = 10;
    SELECT ename,job,sal,deptno FROM emp
    WHERE sal > 2000;
    SELECT ename,job,sal,deptno FROM emp
    WHERE job = 'CLERK';
    --字符串加单引号,区分大小写
    --where 字句中不能出现列的别名
    SELECT ename,job,sal,12*sal nianxin FROM emp
    WHERE 12*sal > 30000;
    --where 子句中的列可以不出现在 select ,为了结果的可读性最好选择 where 子句中的条件查询
    SELECT ename,job,deptno FROM emp
    WHERE deptno = 30;
    2.比较运算符
    --between 最小值 and 最大值,范围匹配
    SELECT ename,job,sal,deptno FROM emp
    WHERE sal BETWEEN 1500 AND 3000;
    --in() 列表匹配
    SELECT ename,job,sal,deptno FROM emp
    WHERE job IN ('CLERK','SALESMAN','PRESIDENT');
    --like 模糊匹配字符串
    --_ 表示任意1个字符
    --% 表示任意个任意字符
    SELECT * FROM emp
    WHERE ename LIKE 'S%';   --开头为S
    SELECT * FROM emp         
    WHERE ename LIKE '%S';  --结尾为S
    SELECT * FROM emp
    WHERE ename LIKE '%S%';  --包含S
    SELECT * FROM emp
    WHERE ename LIKE '_A%';  -- 第二个字符为A 
    --is null 匹配空值
    SELECT ename,job,sal,comm FROM emp
    WHERE comm IS NULL;
    3.逻辑运算符
    --and 满足所有条件才会返回结果
    SELECT ename,job,sal,deptno FROM emp
    WHERE deptno = 20
    AND sal > 2500;
    --or 满足任意一个条件就会返回结果
    SELECT ename,job,sal,deptno FROM emp
    WHERE deptno = 20
    OR sal > 2500;
    --not 返回不满足条件的结果
    SELECT ename,job,sal,deptno FROM emp
    WHERE job NOT IN('SALESMAN','MANAGER');
    4.运算优先级:数学运算>比较运算符>not>and>or
    SELECT * FROM emp
    WHERE job IN ('SALESMAN','CLERK')
    OR sal > 2000
    AND deptno = 20;
    SELECT * FROM emp
    WHERE (job IN ('SALESMAN','CLERK')
    OR sal > 2000)
    AND deptno = 20;
    5.order by子句排序
    --order by 子句永远在查询语句的最后
    --asc 升序,默认可以不写
    --desc 降序
    SELECT * FROM emp
    ORDER BY sal;
    SELECT * FROM emp
    WHERE deptno = 30
    ORDER BY sal DESC;
    --不仅可以对数字排序,也可以对字符和日期排序
    SELECT * FROM emp
    ORDER BY hiredate;
    SELECT * FROM emp
    ORDER BY ename DESC;
    --可以对多列进行排序
    SELECT ename,job,sal,deptno FROM emp
    ORDER BY deptno,sal DESC;
    --order by 后面的列可以不出现在 select ,为了提高结果的可读性最好选择排序的列
    SELECT ename,job,sal FROM emp
    ORDER BY deptno;
    --可以使用列的别名排序
    SELECT ename,job,sal,12*sal nianxin FROM emp
    ORDER BY nianxin DESC;
    练习
    1.查询emp表,显示薪水大于2000,且工作类别是MANAGER的雇员信息
    SELECT * FROM emp
    WHERE sal > 2000
    AND job = 'MANAGER';
    2.查询emp表,显示年薪大于30000,工作类别不是MANAGER的雇员信息
    SELECT ename,job,sal,12*sal nianxin FROM emp
    WHERE 12*sal > 30000
    AND job <> 'MANAGER';
    3.查询emp表, 显示薪水在1500到3000之间,工作类别以“M”开头的雇员信息
    SELECT * FROM emp
    WHERE sal BETWEEN 1500 AND 3000
    AND job LIKE 'M%';
    4.查询emp表,显示佣金为空并且部门号为20或30的雇员信息(佣金=薪水SAL+津贴COMM)  
    SELECT ename,job,sal,comm,sal+comm yongjin,deptno FROM emp
    WHERE sal+comm IS NULL
    AND deptno IN (20,30);
    5.查询emp表,显示佣金不为空或者部门号为20的雇员信息,要求按照薪水降序排列 (佣金=薪水+津贴)
    SELECT ename,sal,comm,sal+comm yongjin,deptno FROM emp
    WHERE sal+comm IS NOT NULL
    OR deptno = 20
    ORDER BY sal DESC;
    6.查询emp表,显示年薪大于30000工作类别不是MANAGER,
    且部门号不是10或40的雇员信息,要求按照雇员姓名进行排列
    SELECT ename,job,sal,12*sal nianxin,deptno FROM emp
    WHERE 12*sal > 30000
    AND job <> 'MANAGER'
    AND deptno NOT IN (10,40)
    ORDER BY ename;

    第四章 单行函数
    1.函数
    f(x)=3x+4
    f(2)=10
    f1(x,y)=5x+2y
    f1(3,4)=23
    2.字符函数
    --upper(x) 将字符串 x 转换成大写
    SELECT UPPER('abcdefg') FROM emp;
    --dual 是系统默认的一张空表,用来做辅助的查询和运算
    SELECT UPPER('abcdefg') FROM dual;
    SELECT * FROM emp
    WHERE UPPER(job) = UPPER('clerk');
    --lower(x) 将字符串 x 转换成小写
    SELECT LOWER('ABCDEFG') FROM dual;
    SELECT LOWER(ename),LOWER(job) FROM emp;
    SELECT * FROM emp
    WHERE LOWER(job) = 'salesman';
    --initcap(x) 将字符串 x 首字母转换成大写,其他字母小写
    SELECT INITCAP('abcdEFG') FROM dual;
    SELECT INITCAP(ename),INITCAP(job) FROM emp;
    --length(x) 返回字符串 x 的长度
    SELECT LENGTH('abcdefg') FROM dual;
    SELECT ename,LENGTH(ename) FROM emp;
    SELECT * FROM emp
    WHERE LENGTH(ename) = 5;
    --nvl(x,y) 判断 x 的值,如果 x 不为空则返回 x ,如果 x 为空则返回 y
    SELECT ename,sal,comm,12*(sal+NVL(comm,0)) FROM emp;
    --x 和 y 必须是相同的数据类型
    --SELECT ename,job,NVL(mgr,'BOSS') FROM emp;
    --nvl2(x,y,z) 判断 x 的值,如果 x 不为空则返回 y ,如果 x 为空则返回 z
    SELECT ename,sal,comm,12*(sal+NVL2(comm,comm,0)) FROM emp;
    SELECT ename,job,mgr,NVL2(mgr,'EMPLOYEE','BOSS') FROM emp;
    --y 和 z 数据类型必须一致
    --replace(x,y,z) 在字符串 x 中查找字符串 y 替换为字符串 z
    SELECT REPLACE('abcdefg','cd','xyz') FROM dual;
    SELECT ename,REPLACE(ename,'A','wwwwwww') FROM emp;
    --substr(x,m,n) 从字符串 x 的第 m 个字符开始截取,截取长度为 n 的子字符串
    SELECT SUBSTR('abcdefg',2,3) FROM dual;
    SELECT ename,SUBSTR(ename,2,2) FROM emp;
    --n 可以不写,如果不写默认截取后面所有的字符串
    SELECT ename,SUBSTR(ename,3) FROM emp;
    SELECT ename,SUBSTR(ename,LENGTH(ename)-1) FROM emp;
    --如果 m 为负,从右向左数
    SELECT ename,SUBSTR(ename,-2) FROM emp;
    --lpad(x,n,y) 使用字符串 y 将字符串 x 从左边补齐到长度为 n 的字符串
    SELECT LPAD('abcdefg',15,'w') FROM dual;
    SELECT LPAD(ename,10,'name') FROM emp;
    --y 可以不写,如果不写默认用空格补齐
    SELECT LPAD('abcdefg',15) FROM dual;
    SELECT LPAD(ename,10) FROM emp;
    --当 n 小于 x 的长度时,会截取字符串
    SELECT LPAD(ename,4) FROM emp;
    --rpad(x,n,y) 使用字符串 y 将字符串 x 从右边补齐到长度为 n 的字符串
    SELECT RPAD('abcdefg',15,'w') FROM dual;
    SELECT RPAD(ename,10,'name') FROM emp;
    --y 可以不写,如果不写默认用空格补齐
    SELECT RPAD('abcdefg',15) rp FROM dual;
    SELECT RPAD(ename,10) rp FROM emp;
    --当 n 小于 x 的长度时,会截取字符串
    SELECT RPAD(ename,4) FROM emp;
    --ltrim(x,y) 将字符串 x 左边的子字符串 y 去掉
    SELECT LTRIM('abcbcxbacbacbdefg','abc') FROM dual;
    --y 中的字符串没有先后顺序,只要 x 的左边有 y 中的任意字符都会被去掉
    SELECT ename,LTRIM(ename,'AD') FROM emp;
    --y 可以不写,如果不写默认去掉空格
    SELECT LTRIM('       abcdefg       ') FROM dual;
    --rtrim(x,y) 将字符串 x 右边的子字符串 y 去掉
    SELECT RTRIM('abcbcxbacbacbdefgabcbac','abc') FROM dual;
    --y 中的字符串没有先后顺序,只要 x 的左边有 y 中的任意字符都会被去掉
    SELECT ename,RTRIM(ename,'AD') FROM emp;
    --y 可以不写,如果不写默认去掉空格
    SELECT RTRIM('       abcdefg       ') FROM dual;
    --trim(leading/trailing/both y from x) 将字符串 y 从字符串 x 的左边 / 右边 / 两边 去掉
    --leading 左边,trailing 右边
    --both 两边,默认可以不写
    SELECT ename,TRIM('S' FROM ename) FROM emp;
    SELECT ename,RTRIM(LTRIM(ename,'S'),'S') FROM emp;
    --y 只能有1个字符
    --y 可以不写,如果不写默认去掉空格
    SELECT TRIM('       abcdefg     ') tr FROM dual;
    --concat(x,y) 将字符串 x 和字符串 y 连接起来,等于||
    --concat 只允许 2 个参数
    SELECT CONCAT(ename,job) FROM emp;
    SELECT CONCAT(CONCAT(ename,' is a '),job) FROM emp;
    --instr(x,y,m,n) 返回 字符串 y 从字符串 x 第 m 个位置出现第 n 次的位置
    SELECT INSTR('abcabcfdfdsfdsbfb','d',3,3) FROM dual;
    SELECT ename,INSTR(ename,'A',1,1) FROM emp;
    --n 可以不写,如果不写默认返回第一次出现的位置
    SELECT ename,INSTR(ename,'A',2) FROM emp;
    --m 可以不写,如果不想默认从第一个字符开始查找
    SELECT ename,INSTR(ename,'A') FROM emp;
    SELECT * FROM emp
    WHERE ename LIKE '%A%';
    SELECT * FROM emp
    WHERE INSTR(ename,'A') > 0;
    2.数字函数
    --floor(n) 返回小于等于数字 n 的最大整数,向下取整
    SELECT FLOOR(123),FLOOR(123.456),FLOOR(-123.456) FROM dual;
    --mod(m,n) 返回 m 除以 n 的余数
    SELECT MOD(8,3),MOD(7.5,2.3),MOD(-9,-2) FROM dual;
    --n 可以为 0 ,n 为 0 返回 m
    --round(m,n) 返回 数字 m 精确到小数点后 n 位 的数字
    SELECT ROUND(123.456,1),ROUND(123.456,2),ROUND(123.456,0) FROM dual;
    --当 n 为负数时,精确到小数点左边 n 位
    SELECT ROUND(127.456,-1),ROUND(183.456,-2),ROUND(623.456,-3) FROM dual;
    --n 可以不写,如果不写默认精确到个位
    SELECT ROUND(123.456) FROM dual;
    --trunc(m,n) 返回 数字 m 截取到小数点后 n 位 的数字
    SELECT TRUNC(123.456,1),TRUNC(123.456,2),TRUNC(123.456,0) FROM dual;
    --当 n 为负数时,截取到小数点左边 n 位
    SELECT TRUNC(127.456,-1),TRUNC(183.456,-2),TRUNC(623.456,-3) FROM dual;
    --n 可以不写,如果不写默认截取到个位
    SELECT TRUNC(123.456) FROM dual;
    4.日期函数
    SELECT * FROM emp;
    SELECT SYSDATE FROM dual;
    --add_months(x,n) 给日期 x 加上 n 个月
    SELECT ADD_MONTHS(SYSDATE,5) FROM dual;
    SELECT ename,hiredate,ADD_MONTHS(hiredate,3) FROM emp;
    --n 可以为负数,如果为负减去 n 个月
    SELECT ADD_MONTHS(SYSDATE,-5) FROM dual;
    --last_day(x) 返回 日期 x 所在月份的最后一天
    SELECT LAST_DAY(SYSDATE) FROM dual;
    SELECT ename,hiredate,LAST_DAY(hiredate) FROM emp;
    --next_day(x,date) 返回日期 x 之后的下一个星期几
    SELECT NEXT_DAY(SYSDATE,'SATURDAY') FROM dual;
    SELECT ename,hiredate,NEXT_DAY(hiredate,'FRIDAY') FROM emp;
    SELECT LAST_DAY(ADD_MONTHS(SYSDATE,7)) FROM dual;
    5.转换函数
    --隐含的数据类型转换:系统默认完成的数据类型转换,主要是数字和字符之间的转换,由系统自动完成
    SELECT * FROM emp
    WHERE deptno = '10';
    --清楚的数据类型转换:使用转换函数
    --to_char(x,'format') 将日期 x 转换成格式为 format 的字符串
    --YYYY 表示四位年份数字,YEAR 表示年份的拼写
    --MM 表示两位月份数字,MONTH 表示月份的拼写
    --DD 表示两位日期数字,DAY 表示日期的拼写(星期)
    --可以使用分隔符将年月日隔开,可以是,:;-_空格
    SELECT SYSDATE,TO_CHAR(SYSDATE,'YYYYMMDD') FROM dual;
    SELECT ename,hiredate,TO_CHAR(hiredate,'YYYY:MM:DD') FROM emp;
    SELECT ename,hiredate,TO_CHAR(hiredate,'YEAR MONTH DAY') FROM emp;
    --数字和拼写可以混合使用
    SELECT ename,hiredate,TO_CHAR(hiredate,'YYYY MONTH DD') FROM emp;
    --年月日的顺序可以自定义
    SELECT ename,hiredate,TO_CHAR(hiredate,'MONTHDD-YYYY') FROM emp;
    --可以在格式前面加 fm 去掉多余的 0 或者空格
    SELECT ename,hiredate,TO_CHAR(hiredate,'fmMONTH-DD-YYYY') FROM emp;
    --年月日可以不写全
    SELECT ename,hiredate,TO_CHAR(hiredate,'YYYY') FROM emp;
    SELECT ename,hiredate,TO_CHAR(hiredate,'MM') FROM emp;
    SELECT ename,hiredate,TO_CHAR(hiredate,'MM-DD') FROM emp;
    --to_char(m,'format') 将数字 m 转换成格式为 format 的字符串
    --9 代表一位数字
    --0 代表一位数字,如果位数不足用 0 补齐
    --, 代表分隔符,位置可以自定义
    --. 代表小数点,只能出现一次,不能在开头和结尾
    --$ 代表货币,L 代表本地货币
    SELECT ename,TO_CHAR(sal,'999,999.99') FROM emp;
    SELECT ename,TO_CHAR(sal,'000,000.00') FROM emp;
    SELECT ename,TO_CHAR(sal,'99,99,99.99') FROM emp;
    SELECT ename,TO_CHAR(sal,'$999,999.99') FROM emp;
    --to_date(x,'format') 将字符串 x 转换成日期
    SELECT TO_DATE('1997-07-01','YYYY-MM-DD') FROM dual;
    SELECT TO_DATE('19970701','YYYYMMDD') FROM dual;
    --年月日的顺序可以自定义
    SELECT TO_DATE('19970701','YYYYDDMM') FROM dual;
    --年月日也可以只定义部分,最终结果是一个完整的日期格式
    SELECT TO_DATE('1997','YYYY') FROM dual;
    --如果只转换年份,会用当前系统所在月份的第一天来补齐日期
    SELECT TO_DATE('12','MM') FROM dual;
    --如果只转换月份,会用当前系统所在年份和当月的第一天来补齐
    SELECT TO_DATE('12','DD') FROM dual;
    --如果只转换日期,会用当前系统所在月份来补齐
    SELECT TO_DATE('0809','MMDD') FROM dual;
    6.decode函数
    /*
    decode(x,value1,result1,
                   value2,result2,
                   ...
                   valueN,resultN,
                   default)
    判断 x 的值,如果 x=value1 ,返回 result1,
                       如果 x=value2 ,返回 result2 ,
                       ……
                       如果 x=valueN ,返回 resultN ,
                       如果 x 不等于以上任何值,返回 default
    */
    SELECT ename,job,sal,deptno,
    DECODE(deptno,10,sal+200,
                              20,sal+300,
                              30,sal+500,
                              sal+100) addsal
    FROM emp;
    练习
    1.用一个sql语句完成在字符串”hello”左右各添加5个*,使其最终返
         回*****hello*****(用三种方法实现)
    SELECT '*****'||'hello'||'*****' FROM dual;
    SELECT CONCAT('*****',CONCAT('hello','*****')) FROM dual;
    SELECT RPAD(LPAD('hello',10,'*'),15,'*') FROM dual;
    2.写一条sql语句返回”abcdefg”的后三位字符“efg”,并转换成大写
    SELECT UPPER(SUBSTR('abcdefg',5)) FROM dual;
    SELECT UPPER(LTRIM('abcdefg','abcd')) FROM dual;
    3.查询emp表,显示删除掉第一个字符后的员工姓名(如员工ALLEN,显示为LLEN)(2种方法实现)
    SELECT ename,SUBSTR(ename,2) FROM emp;
    SELECT ename,LTRIM(ename,SUBSTR(ename,1,1)) FROM emp;
    4.查询emp表,显示姓名中不包含字符’A’的员工信息
    SELECT * FROM emp
    WHERE ename NOT LIKE '%A%';
    SELECT * FROM emp
    WHERE INSTR(ename,'A') = 0;
    5.查询emp表,使用员工姓名的第一个字符将员工姓名从左边补齐到长度为10
    SELECT ename,LPAD(ename,10,SUBSTR(ename,1,1)) FROM emp;
    6.查询emp表,显示6月份入职的员工信息
    SELECT ename,hiredate,TO_CHAR(hiredate,'MM') FROM emp
    WHERE TO_CHAR(hiredate,'MM') = 6;
    7.查询在某个月倒数第三天入职的员工信息
    SELECT * FROM emp
    WHERE hiredate = LAST_DAY(hiredate)-2;
    8.写一条sql语句查询员工编号、员工姓名、工资、部门号,
    要求当员工在10号部门时,显示’财务部’,20号部门时显示’研发部’,
    30号部门时显示’销售部’,其余部门显示’未知部门’
    SELECT empno,ename,sal,deptno,
    DECODE(deptno,10,'Finance',
                              20,'Research',
                              30,'Sales',
                              'Unknown') deptname
    FROM emp;

    第五章 多表查询
    1.笛卡尔结果
    SELECT ename,job,sal,dname,loc FROM emp,dept;
    SELECT * FROM dept;
    2.多表查询
    --多表查询时,必须使用表名对列名进行限定
    --如果不限定列名,会在所有的表中去查找该列,会降低查询效率
    --多表查询时,from 换行
    SELECT emp.ename,emp.job,emp.sal,emp.deptno,dept.deptno,dept.dname,dept.loc
    FROM emp,dept;
    3.等值连接
    --外键和主键的等值对应
    SELECT emp.ename,emp.job,emp.sal,emp.deptno empdno,dept.deptno deptdno,dept.dname,dept.loc
    FROM emp,dept
    WHERE emp.deptno = dept.deptno;
    --使用别名来区别同名的列
    --多表查询时,必须使用表的别名对列名进行限定
    SELECT e.ename,e.job,e.sal,e.deptno eno,d.deptno dno,d.dname,d.loc
    FROM emp e,dept d
    WHERE e.deptno = d.deptno;
    SELECT e.ename,e.job,e.sal,e.deptno eno,d.deptno dno,d.dname,d.loc
    FROM emp e,dept d
    WHERE e.deptno = d.deptno
    AND e.sal > 2000;
    4.不等值连接
    SELECT * FROM salgrade;
    SELECT e.ename,e.sal,s.grade,s.losal,s.hisal
    FROM emp e,salgrade s
    WHERE e.sal BETWEEN s.losal AND s.hisal;
    5.自连接
    SELECT * FROM emp;
    SELECT w.ename,w.mgr,m.empno,m.ename
    FROM emp w,emp m
    WHERE w.mgr = m.empno;
    6.外连接
    --查询员工信息和他所在部门的信息,没有员工的部门也显示
    SELECT * FROM emp;
    SELECT * FROM dept;
    --如果在多表查询时,需要显示某张表的所有数据,包括不符合连接条件的数据,使用外连接
    --如果要显示某张表的所有数据,把 (+) 放在连接条件的另一侧
    SELECT e.*,d.*
    FROM emp e,dept d
    WHERE e.deptno(+) = d.deptno;
    --显示员工和其经理的名字,没有经理的员工也显示
    SELECT w.ename,w.mgr,m.empno,m.ename
    FROM emp w,emp m
    WHERE w.mgr = m.empno(+);
    --全外连接
    --查询员工信息和他所在部门的信息,没有员工的部门也显示,没有部门的员工也显示
    SELECT e.*,d.*
    FROM emp e FULL OUTER JOIN dept d
    ON e.deptno = d.deptno;
    练习
    1.查询EMP、DEPT表,输出的列包含员工姓名、工资、部门编号、部门名称、部门地址.
    SELECT e.ename,e.sal,e.deptno,d.dname,d.loc
    FROM emp e,dept d
    WHERE e.deptno = d.deptno;
    2.查询工资等级为3/4/5级的员工姓名,工资,工资等级
    SELECT e.ename,e.sal,s.grade
    FROM emp e,salgrade s
    WHERE e.sal BETWEEN s.losal AND s.hisal
    AND s.grade >= 3;
    3.显示10号部门的员工姓名,工资,工资等级,部门名称
    SELECT e.ename,e.sal,s.grade,d.dname
    FROM emp e,dept d,salgrade s
    WHERE e.deptno = d.deptno
    AND e.sal BETWEEN s.losal AND s.hisal
    AND e.deptno = 10;
    4.查询emp表,显示员工姓名及其经理的姓名,没有经理的员工也需要显示
    SELECT w.ename,m.ename
    FROM emp w,emp m
    WHERE w.mgr = m.empno(+);
    5.列出EMP表中部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
    SELECT d.dname,e.*
    FROM emp e,dept d
    WHERE e.deptno(+) = d.deptno;

    第六章 分组函数
    1.分组函数
    --avg() 求平均值
    SELECT AVG(sal) FROM emp;
    --sum() 求和
    SELECT SUM(sal) FROM emp;
    --count() 计数
    SELECT COUNT(empno) FROM emp;
    SELECT COUNT(*) FROM emp;
    --max() 最大值, min() 最小值
    SELECT MAX(sal),MIN(sal) FROM emp;
    --对日期和字符串也能计算最大和最小值
    SELECT MAX(ename),MIN(ename) FROM emp;
    SELECT MAX(hiredate),MIN(hiredate) FROM emp;
    --分组函数会忽略空值
    SELECT AVG(comm),COUNT(comm) FROM emp;
    SELECT SUM(comm)/COUNT(empno),SUM(comm)/COUNT(comm) FROM emp;
    --使用 nvl 函数处理空值
    SELECT AVG(NVL(comm,0)),COUNT(NVL(comm,0)) FROM emp;
    --使用分组函数时可以使用 where 子句对分组计算的范围进行限定
    SELECT AVG(sal),COUNT(empno) FROM emp
    WHERE deptno = 10;
    SELECT AVG(sal),COUNT(empno) FROM emp
    WHERE job = 'SALESMAN';
    SELECT AVG(sal),COUNT(empno) FROM emp
    WHERE sal > 1500;
    --使用分组函数时,能不能选择普通列?
    --SELECT deptno,AVG(sal) FROM emp;
    2.group by子句
    --group by 跟列名,当该列的数值想等时看作为一组
    --group by 后面的普通列可以出现在 select 后面,让分组函数的结果可读性更高
    SELECT deptno,AVG(sal),COUNT(empno) FROM emp
    GROUP BY deptno;
    --当 select 后面既有普通列又有分组函数时,必须使用 group by 子句
    --select 后面既有普通列又有分组函数时,普通列必须出现在 group by 子句
    --计算每个职位的人数和工资之和
    SELECT job,COUNT(empno),SUM(sal) FROM emp
    GROUP BY job;
    --多列分组
    SELECT deptno,job,MAX(sal),MIN(sal),COUNT(empno) FROM emp
    GROUP BY deptno,job
    ORDER BY deptno;
    --对分组函数的结果进行限定时,不能使用  where 子句,where 子句中不能出现分组函数
    /*
    SELECT deptno,AVG(sal) FROM emp
    WHERE AVG(sal) > 2500
    GROUP BY deptno;
    */
    3.having子句
    SELECT deptno,AVG(sal) FROM emp
    GROUP BY deptno
    HAVING AVG(sal) > 2500;
    --使用组函数时(group by 和 having 子句),select 后面可以没有分组函数
    SELECT deptno FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 10000;
    4.组函数嵌套
    SELECT AVG(AVG(sal)) FROM emp
    GROUP BY deptno;
    练习
    1.查询EMP表,输出每个职位的职位名称及平均工资,按平均工资升序排列.
    SELECT job,AVG(sal) FROM emp
    GROUP BY job
    ORDER BY AVG(sal);
    2.查询EMP表,输出每个部门的各个职位的平均工资,并按部门编号升序、平均工资降序排序。
    SELECT deptno,job,AVG(sal) FROM emp
    GROUP BY deptno,job
    ORDER BY deptno,AVG(sal) DESC;
    3.查询EMP表,要求写一条sql语句统计出如下图所示结果
      10号部门人数 20号部门人数  30号部门人数
      ------------     ------------       ------------
                4                         4                       6
    SELECT deptno,COUNT(empno) FROM emp
    GROUP BY deptno;
    SELECT SUM(DECODE(deptno,10,1,0)) dept10,
    SUM(DECODE(deptno,20,1,0)) dept20,
    SUM(DECODE(deptno,30,1,0)) dept30
    FROM emp;

    还有一种用的很少的拼接(uniqe),把我们查询到的结果拼接起来,已达到我们展示的效果:对于这钟用法我们,是查询不相关的表

    得到的结果。忘记了这个单词了 ,想起了再说 。。。。。

    再oracle还有一个用发法   转载的  下面
    oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。

    shopping:

    -----------------------------------------

    u_id       goods            num

    ------------------------------------------

    1                苹果                2

    2                 梨子               5

    1                 西瓜               4

    3                 葡萄               1

    3                香蕉                1

    1               橘子                 3

    =======================

    想要的结果为:

    --------------------------------

    u_id          goods_sum

    ____________________

    1              苹果,西瓜,橘子

    2              梨子

    3              葡萄,香蕉

    ---------------------------------

    1. select u_id, wmsys.wm_concat(goods) goods_sum  
    2.  
    3. from shopping  
    4.  
    5. group by u_id  

    想要的结果2:

    --------------------------------

    u_id          goods_sum

    ____________________

    1              苹果(2斤),西瓜(4斤),橘子(3斤)

    2              梨子(5斤)

    3              葡萄(1斤),香蕉(1斤)

    ---------------------------------

    使用oracle wm_concat(column)函数实现:

    1. select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum  
    2.  
    3. from shopping  
    4.  
    5. group by u_id  

    展开全文
  • 查询指定日期时间内sql语句实现原理:如果是月份就是当前的月减去你要统计的时间如我要查询数据库中从今天起往前三个月的所有记录 在数据库教程设计时必须注意时间字段为int(11)这样,保存在数据库的是一个数字型...
    查询指定日期时间内sql语句实现原理:如果是月份就是当前的月减去你要统计的时间如我要查询数据库中从今天起往前三个月的所有记录
    

    在数据库教程设计时必须注意时间字段为int(11)这样,保存在数据库的是一个数字型日期时间戳,我们可以用mktime函数求出当前日期的时间戳进行加减就OK了,下面看实例 
    //一个月 

    $lastMonth = mktime(date(‘h'),date(‘i'),date(‘s'),date(‘m')-1,date(‘d'),date(‘y'));
    $where .= ” dtime > $lastMonth”;

    //三个月 
    $lastThreeMonth = mktime(date(‘h'),date(‘i'),date(‘s'),date(‘m')-3,date(‘d'),date(‘y'));
    $where .= ” dtime > $lastThreeMonth”;
     
    $sql = “select * from testtable ” .$where


    原理是: 
    如果是月份就是当前的月减去你要统计的时间如我要查询数据库中从今天起往前三个月的所有记录,我们的语句如下:mktime(date(‘h'),date(‘i'),date(‘s'),date(‘m')-3,date(‘d'),date(‘y')); 
    七天内的:mktime(date(‘h'),date(‘i'),date(‘s'),date(‘m'),date(‘d')-7,date(‘y')); 
    一小时间内的:mktime(date(‘h')-1,date(‘i'),date(‘s'),date(‘m'),date(‘d'),date(‘y')); 
    上个月第一天:mktime(0,0,0,date(‘m')-1,01,date(‘Y')); 
    上个月最后一天:mktime(0,0,0,date(‘m'),0,date(‘y')); 
    本月第一天:这个简单,也就是01了; 
    本月最后一天:这要用到date函数了,date函数有一个参数t,它就是用来求最后一天的;如:date(‘t') 
    其他做法自己演变就好了

    展开全文
  • 【摘要】有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等。那么用SQL语句如何实现呢? 首先,数据表中的存时间的字段比如是addtime可能是时间戳...

    【摘要】有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等。那么用SQL语句如何实现呢?

    首先,数据表中的存时间的字段比如是addtime可能是时间戳(varchar),也可能是用timestamp类型表示,如果是时间戳格式当然好办,如果是timestamp格式:YYYY-MM-DD HH:II:SS这个格式,如2016-05-01 00:00:00这种格式的SQL语句怎么表示?有下面两张方式:

    (1)第一种方法,使用关键字between...and...,SQL语句如下:

    1. select 需要查询的字段名称 from 表名 where 字段名(表示时间的) between 时间1(如:'2016-5-1 00:00:00') and 时间2(例如:'2016-5-3 00:00:00')
    2. 例如下面:(查询2016年5月1号到3号user表中的name,age字段的数据)
    3. select name,age from user where addtime between '2016-5-1 00:00:00' and '2016-5-3 00:00:00';

    (2)第二种方法,使用比较运算符的方式,即大于号小于号这种方式:

    1. select name,age from where addtime > '2015-5-1 00:00:00' and addtime < '2016-5-3 00:00:00'

    可以试试,之前我也从来没有居然timestamp格式的时间也能用比较运算符查询,我的解决方案是添加一个字段,用时间戳来描述。现在知道可以用这种方式是不是很酷。

     

    转载于:https://www.cnblogs.com/herizai/p/7389574.html

    展开全文
  • DQL 查询 基础数据 CREATE TABLE `dept`( `deptno` INT(2) NOT NULL, `dname` VARCHAR(14), `loc` VARCHAR(13), CONSTRAINT pk_dept PRIMARY KEY(deptno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSER...
  • 文章目录一、产品表以及产品添加更新二、顾客管理三、销售记帐四、统计问题 一、产品表以及产品添加更新 GOODLUCK的产品表:PRODUCTS(PNO,PNAME,PR,QTY) 从该表可以知: PNO->PNAME、PR、QTY 所以这个表只能...
  • 数据库查询与视图

    万次阅读 2012-05-28 20:13:03
    第4章 数据库查询和视图 4.1.1 选择列 通过SELECT语句的项组成结果表的列。 ::= SELECT [ ALL |DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ] { * /*选择当前表或视图的所有列*/ | { table_name |view_...
  • MongoDB数据库查询方法

    2017-06-08 15:55:36
    本文转自:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html  本文将介绍操作符的...查询操作符(内含 数组查询) “gt"、"gt" 、"gte”、 “lt"、"lt"、 "lte”、”null查询”、”all"、"all"、"size
  • 1.查询前10名数据: select top 10 编号,姓名,年龄 from kjbdsjk order by 年龄2.取出数据统计结果前3名数据: select top 3 销售员,sum(销售额) as 销售...查询指定日期的数据:SELECT 编号,名称,日期,销售员 FROM daoju
  • Oracle查询前言选择列查询所有的列查询指定的列为列指定别名计算列值消除结果集中的重复行选择行表达式比较模糊查询——like范围比较IN关键字BETWEEN关键字空值比较子查询!!!单行子查询多行子查询IN运算符ANY...
  • MySQL数据库总结

    万次阅读 多人点赞 2019-11-25 13:26:13
    一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表...
  • java将数据库查询结果写入文本

    千次阅读 2019-09-12 15:42:30
    执行sql,list封装查询结果。 创建一个文件。指定好文件的路径和名称。 迭代遍历list,文件流写入文件。 代码示例: public static void exportTxt() throws IOException{ Calendar cal = Calendar....
  • orcale数据库常用查询语句

    千次阅读 2016-05-27 17:28:20
    next_day(): 指定日期的下一个日期 last_day(): 求出给定日期当月的最后一天日期 47. select empno, ename, months_between(sysdate, hiredate) from emp; select empno, ename, round(months_between...
  • DB2数据库常用的五十四条语句: 1、查找员工的编号、姓名、部门和出生日期,如果出生日期为空值,显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd select emp_no,emp_name,dept,isnull(convert(char(10),...
  • 数据库高级查询题目集

    千次阅读 2015-12-29 21:21:49
    一、销售信息管理系统实现要求 --员工信息表 create table tbEmp (  eid int primary key,  ename varchar2(6),  esex char(2) default '男'   constraints CK_tbEmp_esex check(esex='男' or es
  • 13.数据库查询语言2

    千次阅读 2005-02-16 06:18:00
     Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自数据库自身的行,这乍看起来似乎有些奇怪...
  • 数据库经典查询语句与练习题

    千次阅读 2019-09-27 16:17:11
    查询表 ... 1.2、查询指定字段  1.3、查询指定记录  1.4、带IN关键字的查询  1.5、带BETWEEN AND 的范围查询  1.6、带LIKE的字符匹配查询  1.7、查询空值  1.8、带AND的多条件查询  ...
  • 数据库

    2018-07-16 22:17:11
    数据库根据存储采用的数据结构的不同可以分为许多种,其中常见的有层次式数据库、网络式数据库、关系型数据库。其中关系型数据库占据着市场的主流。 关系型数据库 关系型数据库是建立在关系模型基础上的数据库。...
  • (4)查询订购表,输出订购日期是2016年10月的订单的详细信息 (5)查询订购表,输出订货的会员的编号,要求删除重复行 (6)查询图书表,输出图书的名称和价格,并把查询结果按价格降序排列 (7)查询图书表,...
  • 简单的数据库 查询 增删改查 -----

    千次阅读 2017-05-31 19:58:35
    #1.2 查询指定列 SELECT sid, age FROM stu; #2 条件查询 #2.2 查询性别为女,并且年龄50的记录 SELECT * FROM stu WHERE gender= 'male' AND age=50; #2.3 查询学号为S_1001,或者姓名为liSi的...
  • 一、单表查询 创建查询环境 CREATE TABLE fruits( f_id char(10) NOT NULL, s_id INT NOT NULL, f_name char(255...
  • 1.尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询 2.避免频繁创建和删除临时表,以减少系统表资源的消耗。 3.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。  4.建立高效...
  • 限定查询的格式 认识限定查询:筛选数据(where语句); Where子句:可以设置一系列的过滤条件,可以使用逻辑运算进行连接。   限定运算符: 1.关系运算符(>, =, ):进行大小或相等的比较,其中不等于有两种,!=和 ...
  • 数据库笔记

    千次阅读 2020-05-11 18:06:36
    2、登录mysql:mysql -uroot -p 3、退出mysql:exit / quit DDL部分 1、创建数据库:①直接创建数据库:create database db1;... ②判断不存在之后,再创建:create database ... ③创建数据库指定字符集:crea...
  • Mysql数据库-子查询练习一
  • 一.select 语句 select [top子句] 列名1 as 别名1,列名2 as 别名2....> ...1.top 子句用来指定需要显示的行数,可直接跟数字,也可以指定比例。 select top 10 列名> from 表名> --显示前行 select
  • 员工信息的查询——简单表查询(二) 表信息查看 ——>表信息 简单查询 查询所有的职位 select distinct job from emp; 查询出来的job是所有人的职位,用distinct去重复 查询emp表中每个员工的姓名和年薪 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,634
精华内容 5,853
关键字:

数据库查询指定日期的销售情况