SQL简介&数据表分析&数据查询

        SQL指的是结构化的查询语句

        SQL有几个子类:DML:数据的更新与查询操作(SELECT,FROM,INSERT,GROUPBY,HAVING,WHERE,UPDATE,DELECT),DDL:数据库对象的定义语句,DCL

         scott用户表

         首先如果想知道某一个用户(模式)所有的数据表,可使用如下语法完成:

                CONNECT scott/tiger;

                SET LINESIZE 300;

                SET PAGESIZE 30;

                SELECT*FROM tab;

         此时想要看表结构,可使用:DESC dept;  


         简单查询的SQL语法结构如下所示:([]表示可选)

         简单查询中的最大特征在于:控制数据列,但是它无法进行数据行的控制

        (b)SELECT [DISTINCT]*| 列[别名],列[别名],.......

        (a)FROM 表名称 [别名];

        如果在SELECT子句中使用了"*"表示的是查询一张表中的所有数据列,FROM子句是确定数据来源,来源只要是表结构(行与列的集合),而SELECT子句控制的是需要的数据列(数据的投影:控制所需要显示的数据列)。

        除了进行基本的查询列之外,在简单查询之中也支持四则运算,并且可以直接使用列的内容进行四则运算。为了达到美观,可以进行别名设置。实际上在以后定义数据表名称或者列名称的时候中文也支持,但是如果你想你的开发正常点,别用中文。

        实际上在进行简单查询的过程之中,还支持数据的连接操作,使用“||”进行连接。可以将连接变得好看些,可以中间使用一些文字描述,对于固定的输出类容的处理暂时只考虑两种类型的数据:

        普通数字:那么直接编写(SELECT ename ||1 FROM emp;)

        字符串:使用单引号声明(SELECT empno||‘hello’ FROM emp;)

        在简单查询的操作之中还存在一个DISTINCT关键字,此关键字主要目的是消除重复内容。但是需要提醒的是,如果是消除重复内容,指的是查询出来的数据所有列的内容都重复。


        SQL限定查询(SQL语句的执行顺序,限定符号的使用)

        如果想要对所选择的数据进行控制,那么可以利用WHERE子句完成,此时的SQL语法结构变为如下形式:

        【c.选出所需要的数据列】SELECT [DISTINCT]*| 列[别名],列[别名],.......

        【a.确定数据来源】FROM 表名称 [别名];

        【b.筛选数据行】[WHERE 限定条件(s)];

        SELECT子句是整个语法最后才会执行到的子句。但是如果要进行数据筛选,必须要使用若干个条件判断符:

         关系运行:>、=、<、>=、<=、!=(<>);(=可以在数字上使用,也可在字符串上使用)

         范围运算:BETWEEN...AND;

         空判断:IS NULL、IS NOT NULL;

         IN判断:IN、NOT IN、exists()(复杂查询);

         模糊查询:LIKE、NOT LIKE。

         以上的限定符都只能判断一次,如果现在有若干个限定符,那么就需要进行若干个限定符的连接,可以使用逻辑运算:AND(与)、OR(或)、NOT(非);

   以上所给出的判断符是SQL中的标准支持,其他的不同数据库有可能有自己的扩充的内容

         逻辑运算:()可以保证连接多个条件,如果要连接主要使用AND,OR完成;(连接得越多,执行效率越低)

         在Oracle中所有运算符都不受数据类型的控制,在之前使用的是数字进行了判断,那么除了数字外,也可以用字符串或者是日期进行判断。(字符串的意义不大)

         日期判断:

                 SELECT*

                 FROM emp

                 WHERE hiredate BETWEEN ‘01-1月-81’ AND ‘31-12月-1981’;

         空判断:

                null从数据库定义上来讲属于一个未知的数据,任何情况下如果任何一个数字与null进行计算,那么结果还是null

                SELECT null+1 FROM emp;

                在某些数据列上是允许存在有null值的,但是对于null不能够使用关系运算判断。关系可以判断的是数据,null不是空字符串也不是数字0,所以在SQL之中只能通过IS           NULL来判断为空,以及IS NOT NULL(NOT  字段 IS NULL)判断不为空。

        IN操作符(谓词IN)

        IN指的是根据一个指定的范围进行数据查询

        WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999;VS       WHRER empno IN(7369,7566,7788,9999);后者性能更好,但是需要由一个特别提出的注意点。在使用IN操作的时候实际上也可以使用NOT IN,那么这个表示的是不在范围之中,而问题也就从NOT IN开始。在使用NOT IN的时候如果查找的数据范围之中包含有null值,那么不会有任何结果返回,IN操作无此限制。

        模糊查询:LIKE(核心)

        LIKE可以实现数据的模糊查询操作,如果要想使用LIKE则必须使用如下两个匹配符号:

                “_”:匹配任意的一位符号;

                “%”:匹配任意的符号(包含匹配0位、1位、多位)

        如:查询所v有雇员姓名中以字母A开头的雇员信息

                第一个字母A是固定的,而后的内容随意:WHERE ename LIKE ‘A%’;

                查询所有雇员姓名中第二个字母是M的所有雇员:(第一位可以任意,但必须占一位使用“_”;后面的位随意,使用“%”)WHERE ename LIKE ‘_M%’;

                查询雇员姓名中任意位置上存在有字母A的雇员信息:(开头、结尾、中间都可以,使用“%A%”;) 

         关于LIKE的两点说明:

    如果在使用LIKE进行限定查询的时候,没有设置任何的关键字,那么表示查询全部;

    LIKE可以在任意的数据类型上使用(原生支持),虽然所有的数据类型都支持LIKE,但是往往会在字符串上使用,且所有的搜索引擎不会用LIKE。


        查询排序:ORBER BY子句

        如果说早默认情况下数据查询的时候,它会按照自然排序的进行数据的排列,所有的自然顺序是不可控的,所有往往都会由用户自己来进行排序操作,那么这个时候就可以使用ORDER BY子句,而此时的SQL语句结构就变为了如下形式:

        【c.选出所需要的数据列】SELECT [DISTINCT]*| 列[别名],列[别名],.......

        【a.确定数据来源】FROM 表名称 [别名];

        【b.筛选数据行】[WHERE 限定条件(s)];

        【d.数据排序】[ORDER BY 排序字段[ASC|DESC],排序字段[ASC|DESC],...]

         既然ORDER BY是在SELECT子句之后执行,那么就意味着ORDER BY可以使用SELECT子句定义的别名

         排序可以在任意数据类型上执行,包括字符串,日期都可以。

         除了可以进行单一字段的排序,也可以进行字段的混合排序操作。指的是可以进行若干个字段的排序。

         eg:按照工资由高到低排序,如果工资相同,则按照雇佣日期由早到晚排序

                 ORDER BY sal DESC ,hiredate;

        所有的排序操作都是在WHERE筛选之后进行的。

       总结:1.SELECT子句确定数据列;

                    2.WHERE子句控制数据行;

       3.ORDER BY子句永远最后执行



       索引:

         1) 索引应该在SQL语句的"where"或"and"部分涉及的表列(也称谓词)被建立。假如:personnel表的"firstname"表列作为查询结果显示,而不是作为谓词部分,则不论其值是什么,该表列不会被索引。

  2)用户应该索引具有一定范围的表列,索引时有一个大致的原则:如果表中列的值占该表中行的2 0 %以内,这个表列就可以作为候选索引表列。假设: 一个表有36 000行且表中一个表列的值平均分布(大约每12000行),那么该表列不适合于一个索引。然而,如果同一个表中的其他表列中列值的行在1 0 0 0~15 0 0之间(占3 %~4 % ),则该表列可用作索引。

  3)如果在S Q L语句谓词中多个表列被一起连续引用,则应该考虑将这些表列一起放在一个索引内, O r a c l e将维护单个表列的索引(建立在单一表列上)或复合索引(建立在多个表列上)。复合索引称并置索引。


     


        


    

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值