您的位置:首页 > 数据库

SQL语句之查询基础(一)

2017-10-03 17:00 197 查看
--数据库

    --文件存储的缺点:

    --1.缺乏对数据的管理,并且数据不便修改

    --2.不利于数据的分析和共享

    --3.数据量巨大,大量的数据不能保存在文件中。

--数据库(DataBase)简称DB,是按照数据结构来组织,存储和管理数据的仓库

--数据库管理系统(DataBase Management System):简称DBMS,是数据库的管理软件

--常见的数据库:

    --关系型数据库:(关系:描述两个元素间的关联和对应关系)

       --主流的关系型数据库

       --oracle(甲骨文)

       --Mysql(sun公司收购,orale收购sun公司,5.6)

       --DB2(IBM)

       --SqlServer(微软)

       --Sybase(Sybase,目前被SAP收购)

--表(Table):表示二维的,包含行和列,表的行是横排的(ROW)也叫做记录(Record);表的竖排(Column),是纵列数据库,也被称为字段(Filed)

--一个关系型数据库是由多个数据表组成的,数据库的基本存储结构是数据表,表和表之间是有关联的

--结构化查询语言():SQL是在关系型数据库上执行数据操作,检索,维护的标准语言,可以用来查询数据,操作数据,定义数据,控制数据

  --包含以下5种

    --数据定义语言(DDL):Data Definition Language

    --数据操作语言(DML):Data Manipulation Language

    --事物控制语言(TCL):Transation Control Language

    --数据查询语言(DQL):Data Query Language

    --数据控制语言(DCL):Data Control Language

    --在数据库中,大小写不敏感   

        --1.数据定义语言(DDL):

              --用于建立,修改,删除数据库对象

              --包括:

                 --careate:创建表或其他对象的结构

                      --DESC:查看表结构

                 --alter:修改表或其他对象的结构

                       --add:添加新字段在表的最后,不能添加到中间

                       --drop,drop()跟要删除的字段名

                       --moditify:修改,若表中有数据,类型尽量不要做修改,而且长度最后变长不要变短

                 --drop:删除表及其他对象的结构

                       --代表删除该表中的数据及结构

                 --truncate:删除表数据,保留表结构                                                                                                                                                                                                                          
                                                                                                                                                                                                                                    

             create table Student(

                 name varchar2(10) not null, 

                 age  number(4),

                 birthday Date

             );

            alter table Student add (gender char(1));

            alter table Student drop(birthday);

            alter table Student modify(gender char(1) default 'M');

            desc Student;

            RENAME STUDENT TO NEWsTUDENT;

            desc NEWsTudent;

            drop TABLE NEWsTUDENT;

            truncate table STudent;

        --2.数据操作语言(DML):Data Manipulation Language

              --用于改变数据表中的数据,和事物有关,执行完成后需要经过事物控制语句(TCL)提交后才真正的将数据运用到数据表中

              --包含以下三种

                   --insert:将数据插入到数据表中

                   --update:更新数据表中已存在的数据

                   --delete:删除数据表中的数据

        --3.事物控制语言(TCL):Transation Control Language

              --用于维护数据一致性的语句

              --包括

                   --commit:提交,确认以及进行的数据改变

                   --rollback:回滚,取消以及进行的数据改变

    inse
ba2e
rt into student(name,age,gender) values('葫芦娃',18,'F')

    insert into student(name,age) values('凹凸曼',20);

    --插入语句时,若不指定字段,则是全字段

    insert into student values('天使',17,'F');

     rollback;

     select *from student;   

     commit;

     update student set age=21 where name='凹凸曼';

     delete from student where name = '葫芦娃';

        --4.数据查询语言(DQL):Data Query Language

              --用来查询所需要的数据

                    --select语句

     select age from student where name='凹凸曼';                

        --5.数据控制语言(DCL):Data Control Language

              --用于执行权限的授予和收回的操作

             -- 包括

              --grant:授予,用于给用户或角色授予权限

              --revoke:用于收回用户或角色已有的权限

              --create user:创建用户

--default语句:给列指定默认值

--not null:是一种约束条件,用于确保该字段不能为空

          --默认情况下,任何列都可以为空

          --当某个字段给设置了非空约束,那么该字段就必须存在有效值

          --当执行插入操作时,必须提供这个列的数据

          --当执行更新操作时,不能设置该值为空

        drop table newstudent;

        drop table student;

      insert into student(name,age) values('聪聪',12);

      update student set name='小葱' where age=12;

    --Number类型

         --表示数字类型,被定义为NUMBER(P,S)形式,P表示数字总位数,S表示小数位数

         --NUMBER(P)表示一个整数

         --NUMBER(6,2)表示整数最大为4位,9999,小数最大值为2为,最大值为9999.99

         --NUMBER(4)表示最大整数为9999

    --CHAR类型

         --表示固定长度的字符类型

            --经常被定义为CHAR(n)形式,N表示占用的字节数,最大长度为2000个字节

            --比如name CHAR(20)表示最多可存储20个字节的字符串,并且占用的空间是固定的20个字节

          --Char(10,char)://表示最多存储20个字节

          --每个英文字符占用一个字节,每个中文字符按编码不同,占被2-4被

    --VARCHAR()类型-用法同CHAR

    

    --VARCHAR2类型,它表示变长的字符类型

              --定义的格式VARCHAR(20):表示最多可存储20个字节,根据所存数据的长度,占用空间是变化的,最大占用20

    --Date类型:

              --用于定义日期时间的数据

              --长度是7个字节

              --默认格式为DO-MON-R,比如 11-APR-15;

   --Long类型:varchar的加长版最大存储20G字符串数据

   --Clob类型,存储定长或变长字符串,最多能答4GB的字符串数据

             --每个表只能有一个Long型,该字段不能作为主键,不能建立索引,不能出现在查询语句中

             --普通的字符串建议用varchar2,如果数据比较大,建议用CLOB类型

    select ename,sal from emp;   

    

--字符串函数

--concat(char1,char2):返回两个字符串连接后的结果

       --等价操作:连接操作符‘||’

     select concat(concat(ename, ':'), sal) name_sal from emp; --name_sal为别名,也可在前加as

      --适合多个字符串的连接,更加直观,可读性强

      select ename||':'||sal from emp;

--length():返回字符串的长度

      --length(char):用于返回字符串的长度

      --如果该字符串是用char类型定义返回的是定义的长度(除了返回字符串的长度后面还要用空格补上达到定义的长度)

      --如果该字符串使用varchar2定义返回的是字符串的长度

          

       select ename,length(ename) from emp;     

--UPPER,LOWER,Initcap:大小写转换函数,用来转换字符的大小写

      --UPPER(CHAR) 用来将字符转换为大写形式

      --LOWER(CHAR):用来将字符转换为小写形式

      --Initcap(CHAR):用于将字符转换为每个单词首字母大写

            --dual是伪表

        select UPPER('hello world'),Lower('HELLO WORLD'),INITCAP('the soap') from dual;

--TRIM,LTRIM,RTRIM:截去子串

      --trim(c2 from c1):从c1前后两端截去c2,如果c2是空格,就截去空格,如果不是,就截去c2,如果c2不存在,就截去

              --c1两端的空格

      --ltrim(c1[,c2]):从C1左边截去c2    

      --rtrim(c1[,c2]):从c1右边截去c2

      

         select trim('e' from 'eliete') as t1,

                ltrim('elite','e') as t2,

                rtrim('elite','e') as t3 

                from dual;

     --trim经常用来去除字符串两端的空格

--LPAD,RPAD:补位函数,用于在字符串char1左端或右端用char2补足到n位,char2字符串可以重复多次

      --LPAD(char1,n,char2):左补位函数

      --RPAD(char1,n,char2):右补位函数

          

         select ename,lpad(sal, 6,'$') from emp; 

          

--SUBSTR:用于返回字符串的子串,返回char中从m位中取n个字符

      --如果m=0从首字母开始

      --如果m为负数,从尾部开始

      --如果没有设置n,或者n的长度超过了n的长度,则取到字符串的末尾

      --字符串首位计数从1开始

         

       select substr('think in java',1,6) from dual;   

 

 --INSTR

     --INSTR(CHAR 1,CHAR2):返回字符串char2在char1中的位置

      select instr('I LOVE YOU','LOVE') from dual;

          

          

--数值类型

--NUMBER(P,S):P代表总位数,取值1-38位

--NUMBER(P):P代表总位数,1-38位

  

--数值类型的函数             

--ROUND(n[,m]):用于四舍五入

     --参数中n可以是任何数字,也即是被处理的函数

     --m必须为整数

     --m为整数则四舍五入到小数点后m位

     --m为0则四舍五入到整数位

     --m为负数,则四舍五入到小数点前的m位

     --若m缺省,则默认为0

     

        select round(45.6789) from dual;

        select round(45.6789,2) from dual;

        select round(45.6789,-1) from dual;

        select round(45.6789,-2) from dual;

--TRUNC(N[,M]):用于截取

      --N和M的定义和Round(N[,M])相同,不同的是功能上按照截取的方式来处理数字n

             

        select trunc(45.6789) from dual;

        select trunc(45.6789,2) from dual;

        select trunc(45.6789,-1) from dual;

        select trunc(45.6789,-2) from dual;        

             

--MOD(M,N)返回m除以n返回的余数

     --若n为0,则直接返回m

        select ename,mod(sal,100) from emp;

             

--CEIl和FLOOR()

     --CEIL(M) 大于或等于该数最小整数  

         select CEIL(45.789) from dual;

    --FLOOR(M)返回小于或等于该数的最大整数

         select floor(45.789) from dual;

      

--Date类型

--oracle中的日期类型,用来保存日期和时间

     --Date:表示的日期范围公元前4712年1月1日到公元9999年12月31日

     --第一个字节:世纪

     --第二个字节:年    

     --第三个字节:月

     --第四个字节:日

     --第五个字节:时

     --第六个字节:分

     --第七个字节:秒

--timestamp:orcale常用的日期类型

     --和Date类型的区别:不仅可以保存日期和时间,还能保存小数秒,最高精确到纳秒(ns)

     --在数据库中采用7个或11个字节存储

     --第一到第七个字节和Date效果一样,第八到十一个字节采用4个字节存储纳秒,内部运算的类型为整型。

     

     --SYSDATE:本质是orcale的内部函数,返回的是系统当前时间,精确到秒,默认显示格式 DD-MON-RR

     select sysdate from dual;

    --SYSTIMESTAMP:本质是orcale的内部函数,返回的是系统当前日期和时间,精确到毫秒, 

     select systimestamp from dual;

         

--日期转换函数

--to_Date(char(,fmt(,nlsparams))):将字符串按照定制的格式转换为日期类型

     --char:要转换的字符串

     --fmt:格式

     --指定日期语言

    --需求:查询2002年后入职的员工

              select ename,hiredate from emp where hiredate>to_date('1986-01-01','YYYY-MM-DD');

                 

       --常见的日期格式

       --YY     2位数字的年份

       --YYYY   4为数字的年份

       --MM     2位数字的月份

       --MON    简拼的月份

       --MONTH  全拼的月份

       --DD     2位数字的天

       --DY     周几的缩写

       --DAY    周几的全拼

       --HH24   24小时制

       --MI     显示分钟

       --SS     显示秒

       

--to_char():将其他类型的数据转换为字符串

      --to_char(date,fmt):将指定的日期类型数据date按照指定的格式数组字符串

      

      select ename,hiredate,to_char(hiredate,'YYYY"/"MM"/"DD') from emp;        

              

--空值操作

      --null即空值

      --在数据库中任何类型的字段均可取空值为null

     drop table student;

     create table student{

       id number(4),

       name char(20),

       gender char(1);

     }

     --隐式插入null值

     insert into student(id,name)values(9528,'旺财');

     --显示插入null值

     insert into student(id,name,gender)values(9527,'葫芦娃',null);

     

     --null值的条件查询         

          select name from student where gender is null;

--空值函数

--NVL(x1,x2):将null值转化为非null值

      --NVL:将null值转换为非null值

      --select sal+comm from emp; //错误

      --x1和x2的类型必须是一致的

      

          select ename,sal,comm,sal+NVL(comm,0) totalSalary from emp;  

      

--NVL2(X1,X2,X3):和NVL功能类似,将null值换成非null值

       --NVL2用来判断x1是否是Null值,如果是返回x3,不是返回x2;

     

         

         

         

         

         

         

         

         

         

         

         

         

         

         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: