zoukankan      html  css  js  c++  java
  • SQL学习(一)

    学了3天的sql是时候做一个总结了

    第一章

      一、数据库的概念

        要明白以下几个概念

        1.1.1DB  

          数据库(database) 存储数据的仓库 它保存了一系列有组织的数

      1.1.2DBMS

          数据库管理系统(database manager system)数据库是通过DBMS创建和操作的容器 常见的DBMS有 MySql ORCAL DB2 SQLSEVER  

         1.1.3SQL

          结构化查询语句(structure query language) 专门用来于数据库进行通信的语言 它的优点是 几乎所有的DBMS都支持sql

      二、数据库特点

        1.2.1将数据放到表中,再把表放入到数据库种进行操作

        1.2.2一个数据库中可以有多张表,每一张表都有自己的表明来作为它的唯一标识

        1.2.3表的一些特性 这些特性定义了数据表中如何存储类似于java中的类的设计

        1.2.4表由列组成 也称为字段表是由多个列组成

        1.2.5表中数据按行存储

      三、SQL 语法规范

        1.3.1 不会区分大小写

        1.3.2 建议关键字大写 表名、列名小写

        1.3.3 每条命令最好是以分号结尾 

      四、MySQL常用命令

        1.4.1 查看数据库         show databases;

        1.4.2 打开数据库         use 数据库名;

        1.4.3 查看数据库中的表      use tables;

        1.4.4 查看自己所在的数据库    select database();

        1.4.5 查看数据库的版本      select version();

        1.4.6 创建表           creat table 表名(列名 列类型,列名 列类型);

    第二章

      第一节、条件查询

      语法:select 查询的列名 from 表明 where 筛选的条件

         从筛选条件上可以分成3类:

          一、按条件表达式经行分类 条件运算符 > < = != <> >= <= <>

            案例1.查询工资>12000的员工信息

            SELECT * FROM employees WHERE salary>12000;      

            案例2:查询部门编号不等于90号的员工名和部门编号

            SELECT last_name,department_id FRO Memployees WHEREdepartment_id<>90;  

          二、按逻辑表达式经行分类&& || !t AND OR NOT

            案例1.查询工资在10000到20000之间的员工名、工资以及奖金            

            SELECT last_name,salary,commission_pct FRO Memployees WHERE salary>=10000 AND salary<=20000;

            案例2.查询部门编号不是在90到110之间,或者工资高于15000的员工信息

            SELECT * FROM employees WHERE NOT(department_id>=90 AND department_id<=110) OR salary>15000;

          三、模糊查询 like、 between and、 in、 is null 、 is not null

            模糊查询的特点:一般可以和通配符搭配使用

                    通配符:① %可以匹配任意多个字符,包含0个字符

                        ② _ 任意单个字符

            2.3.1.LIKE 的使用

            案例1.查询员工名中包含字符a的员工信息

            SELECT * FROM employees WHERE last_name LIKE ‘%a%’;

            案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

            SELECT last_name,salary FROM employees WHERE last_name LINK '__e_a%'

            2.3.2 BETWEEN AND 的使用

            注意事项

              ①使用between and 可以提高语句的简洁度

              ②包含两个临界值

              ③两个临界值不要调换

            案例1:查询员工编号在100到120之间的员工信息

            SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

            2.3.3 IN的使用

            含义:判断某字段的值是否属于in列表中的某一项

            注意事项

              ①使用in提高语句的简洁度

              ②in列表的值类型必须一致或者兼容

              ③in列表中不支持通配符

            案例.查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号

            SELECT last_name,job_id FROM employees WHRER job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID='AD_PRES';
            SELECT last_name,job_id FROM employees WHERE job_id IN ('IT_PROT' ,'AD_VP','AD_PRES');
           

            2.3.4 is null 与 is not null的使用
            注意事项
                =或<>不能用于判断null值

                is null或is not null 可以判断null值

            案例1.查询没有奖金的员工名和奖金率
            SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL;
            案例2.查询有奖金的员工名和奖金率
            SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NOT NULL;


            2.3.5 补充 <=> 安全等于
            案例1.查询没有奖金的员工名和奖金率

             SELECT last_name,commission_pct FROM employees WHERE commission_pct <=>NULL;

            案例2:查询工资为12000的员工信息
            SELECT * FROM employees WHERE salary<=>12000;
      

            IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
            <=> :既可以判断NULL值,又可以判断普通的数值。

      第二节、排序查询

      语法:SELECT 查询列表 FROM表 ORDER BY 排序列表  ASC(升序) | DESC(降序);

         1.DESC代表的是降序 ASC代表的是升序 如果不写默认则会按照升序排列

         2.ORDER BY子句中可以支持单个字段也可以支持多个字段、表达式、函数、别名

         3.ORDER BY子句一般是放在查询语句的最后面、limit子句除外

          案例1.查询员工信息 要求工资从高到底排序

          SELECT * FROM employees ORDER BY salary DESC;

             案例2. 查询部门编号<=90的员工信息,按入职时间的先后顺序经行排序

           SELECT * FROM employees WHERE department_id<=90 ORDER BY hiredate ASC;

           案例3. 按年薪的高低显示员工的信息和年薪【按别名排序】

           SELECT * ,12*salary*(1+IFNULL(commission_pct,0)) AS 年薪FROM employees ORDER BY 年薪 DESC;

           案例4.按姓名的长度显示员工的姓名和工资【按函数排序】

           SELECT last_name,salary FROM employees ORDER BY LENGTH(last_name) DESC;

           案例5.查询员工信息 要求先按工资升序,再按员工编号降序

           SELECT * FROM employees ORDER BY salary ASC,employee_id DESC;

      第三节、常见的函数

      概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

          好处:1.隐藏了实现的细节

             2.提高了代码的复用性

             函数的分类:

            1.单行函数 例如 concat length ifnull

            2.分组函数 经常用来做统计使用所以分组函数又叫做统计函数、聚合函数、组函数  例如sum max min count avg 等等...

          一、单行函数

            1.字符函数

            ①length();     用来计算字节

            案例.查询员工姓名所占的字节大小

            SELECT last_name,LENGTH(last_name) AS 字节大小 FROM employees;

            ②concat();    字符串的拼接

            案例.将员工表中姓和名字拼接起来并起一个新的别名叫做 姓名

            SELECT CONCAT(first_name,last_name) AS 姓名 FROM employees;

            ③upper();      转换字符成大写

            案例 将员工的姓名都转成大写

            SELECT UPPER(last_name)  FROM employees;

            ④lower();       转换字符成小写

            案例 将员工的邮箱全部换成小写

            SELECT LOWER(email) FROM employees;

            ⑤substr();      字符串的截取

            案例 截取员工姓名的前三个字符

            SELECT SUBSTR(last_name,1,3) FROM employees;

            注意:它的索引下标是从1开始的  和java的有所不同  第一个参数是要截取的字符串,第二个参数是截取开始的位置,第三个参数是结束的位置

            ⑥instr();      返回字串第一次出现的索引,如果找不到返回0

            案例 返回 “helloWorld” 字符串中 l 出现的位置

            SELECT INSTR("helloWorld",'l');

            注意:这个函数只会返回字符第一次出现的位置

            ⑦trim();       去除两边的空格 也可以去除两别指定的字符

            案例1.去除 “      hello  world        ” 两边的空格

            SELECT TRIM(“      hello  world        ” );

            ⑧lpad();      用指定的字符实现左填充指定长度

            案例 将字符串 "hello" 左边填充5个 '*'

            SELECT LPAD("hello",5,'*');

            ⑨rpad();        用指定的字符实现右填充指定长度

            案例 将字符串 "hello" 右边填充5个 '*'

             SELECT RPAD("hello",5,'*');

             注意:LPAD RPAD 函数 第一个参数是字符串,第二个参数是总字串的长度,第三个参数是填充的内容

            ⑩replace()    替换

            案例 将'hello'字符串中的 'o' 替换成大写的 'G'

            SELECT REPLACE("helloworld",'o','G');

            2.数学函数

            ① round();  四舍五入

            ②ceil();        向上取整,返回>=该参数的最小整数

            ③floor();         向下取整,返回<=该参数的最大整数

            ④truncate();      截断函数

            ⑤mod();       取余

             3.日期函数

             ①now();      返回当前系统日期+时间

             案例 返回系统当前日期

             SELECT NOW();

             ②curdate();      返回对当前系统日期,不包含时间

             案例 返回系统当前的日期

             SELECT CURDATE();

             ③curtime();      返回当前时间,不包含日期

             案例 返回当前时间不包含日期

             SELECT CURTIME();

             ④str_to_date();          将字符串通过指定的格式转成日期

             案例

             ⑤date_format();    将日期转换成字符

             案例 查询有奖金的员工名和入职日期(xx月xx日 xx年)

             SELECT last_name,commission_pct,DATE_FORMAT(hiredate,'%m月/%d日 %Y年')AS put_out FROM employees WHERE commission_pct IS NOT NULL;

             参数: 第一个参数 日期   第二个参数 格式

             ⑥datediff() ;      计算两个日期之间的天数

              案例 计算2000至今的的天数

              SELECT DATEDIFF(NOW(),'2000-1-1');

              第一个参数 当今日期, 第二个参数开始日期

                                 注:日期格式表

    序号 格式符 功能
    1 %Y 四位的年份
    2 %y 2位的年份
    3 %m 月份(01,02,03,...12)
    4 %c 月份(1,2,3,4,...12)
    5 %d 日(01,02,03,...)
    6 %H 小时(24小时制)
    7 %h 小时(12小时制)
    8 %l 分钟(01,02,03,....59)
    9 %s 秒(01,02,03,...59)

     

                  4.其他函数

              ①SELECT VERSION();     查看当前数据库版本

              ②SELECT DATABASE();   查看当前所在的库

              ③SELECT USER();      查看当前主机名

              5.控制流程函数

             ①if()

             案例 SELECT IF(10>5,'大','小');

             参数:第一个参数 判断条件   条件为真输出第二个参数  条件为假输出第三个参数

             ②case()  

              mysql中的case 语法一
                case 要判断的地段或者表达式
                when 常量1 then 要显示的值或者语句1;
                when 常量2 then 要显示的值或者语句2;
                。。。
                else 要显示的值n或者语句n
                end

                case 函数的使用二 类似于多重if

                case 

                when 条件1 then 要显示的值1或者语句1
                when 条件2 then 要显示的值2或者语句2
                .。。。
                else 要显示的值n或语句n
                end

                案例1.查询员工的工资 要求、部门号=30 显示的工资为1.1倍、部门号=40 显示的工资为1.2倍、部门号=50 显示的工资为1.3倍

                SELECT salary,department_id,

                CASE department_id

                WHEN 30 THEN salary*1.1
                WHEN 40 THEN salary*1.2
                WHEN 50 THEN salary*1.3
                ELSE salary
                END AS 新工资
                FROM employees
                ORDER BY salary DESC;

                案例2.查询员工的工资情况、如果工资>20000 显级别A、如果工资>15000 显示级别B、如果工资>10000 显示级别C

                SELECT salary,

                CASE

                WHEN salary>20000 THEN 'A'

                WHEN salary>15000 THEN 'B'

                WHEN salary>10000 THEN 'c'

                ELSE 'D'

                END AS 工资等级

                ORDER BY salary ASC;

    第一篇博客出炉啦          

              

     

             

      

      

  • 相关阅读:
    查看变量是否删除在鼠标工具中用到了。
    poly 顶点坐标的函数
    out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] Error 1
    undefined reference to `pthread_mutexattr_destroy'
    [out/host/linuxx86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1
    can't find a register in class `GENERAL_REGS' while reloading `asm'
    error: ‘ptrdiff_t’ does not name a type
    armeabi4.4.3 引起的错误
    error: "_FORTIFY_SOURCE" redefined [Werror]
    :0:0: 错误: “_FORTIFY_SOURCE”重定义 [Werror]
  • 原文地址:https://www.cnblogs.com/niuxiao/p/13931524.html
Copyright © 2011-2022 走看看