sql语句学习及索引学习,未完待续,补充增删改查

1,查询出last_name 为 ‘Chen‘ 的 manager 的信息. 

  1. select *   
  2. fromwhere employee_id = (   
  3. selectfrom employees   
  4. where‘Chen‘)

2,查询每个月倒数第2 天入职的员工的信息 select last_name, hire_date  

  1. where hire_date = last_day(hire_date) – 1 

  3,查询平均工资高于 8000 的部门 id 和它的平均工资.  SELECT department_id, avg(salary)   

    1. FROMGROUP BY department_id   
    2. HAVINGavg
      查询工资最低的员工信息:last_name, salary  SELECT last_name, salary   
      1. FROMWHERE salary = ( SELECT min(salary)  FROM employees  )  

        查询出 1999 年来公司的所有的员工的salary SELECT salary   

      1. FROMWHERE to_char(hire_date,‘yyyy‘) = ‘1999‘ 

        用一个SQL语句选出每个部门工资最高的员工 select A.* from tab_salary A inner join  (select max(salary) as salary,departid as departid from tab_depart group by departid) B on A.salary=B.salary and A.departid=B.departid
       

      1.   
      2. select name from Employee where Salary=(  
      3. selecttopfrom  (select distinct top 2  salary from Employee order by Salary desc) as temp1    
      4. orderby  
      5.   
      6. select  Name from [Employee]  where Salary =(  
      7. selectMAXfromwherenotinselectMAXfrom
        select b.dname,round((nvl(a.sal,2)),0) sal fromemp a,dept b wherea.deptno(+)=b.deptno groupbyb.dname;     索引:   首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname=‘css‘,如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = ‘css‘ 一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname=‘css‘的数据,是不是感觉性能提升了好多咧.... mysql的索引分为单列索引(主键索引,唯索引,普通索引)和组合索引. 单列索引:一个索引只包含一个列,一个表可以有多个单列索引. 组合索引:一个组合索引包含两个或两个以上的列,     CREATE INDEX account_Index ON `award`(`account`);    唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值,   CREATE UNIQUE INDEX account_UNIQUE_Index ON `award`(`account`);   组合索引   一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称 CREATE INDEX nickname_account_createdTime_Index ON `award`(`nickname`, `account`, `created_time`); 如果你建立了 组合索引(nickname_account_createdTime_Index) 那么他实际包含的是3个索引 (nickname) (nickname,account)(nickname,account,created_time)   删除索引的mysql格式 :DORP INDEX IndexName ON `TableName`   使用索引的优点: 1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性. 2.建立索引可以大大提高检索的数据,以及减少表的检索行数 3.在表连接的连接条件 可以加速表与表直接的相连  4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序) 5.建立索引,在查询中使用索引 可以提高性能   使用索引缺点: 1.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加 2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间 3.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。   什么情况下不创建索引 1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求. 2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率 3.定义为text和image和bit数据类型的列不应该增加索引, 4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系   B-tree

相关文章