SQL小结 增删改查 创建数据库 建表

来源:互联网 发布:速卖通翻译软件 编辑:程序博客网 时间:2024/06/17 03:12


SQL能做什么?


SQL可从数据库取回数据

SQL可在数据库中插入新的记录

SQL可从数据库删除记录

SQL可更新数据库中的数据

SQL 面向数据库执行查询

SQL可创建新数据库

SQL可在数据库中创建新表

SQL可在数据库中创建存储过程

SQL可在数据库中创建视图

SQL可以设置表、存储过程和视图的权限



注:在SQL Server中默认对大小写是不敏感的




1、增    此处有4种方法:

      a. 使用insert插入单行数据:

        语法:insert into <表名>[列名] values <列值>

  例:insert into Stuff(姓名, 性别,出生年月日) values ('李明','','1995/7/7')

   注意:如果省略表名,将依次插入所有列

 

      b.使用insert,select语句将现有表中的数据添加到已有的新表中

        语法:insert into <已有的新表> <列名> select <原表列名> from <原表名>

   例:insert into Stuff('姓名','地址','电子邮件')

            select name,address,email          

            from  Strdents 

       注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致


      c. 直接拿现有表数据创建一个新表并填充
        语法:select <新建表列名> into <新建表名> from <源表名>
        例:select name,address,email into tongxunlu from Strdents


      d. 使用union关键字合并数据进行插入多行


        语法:insert <表名> <列名> select <列值> union select <列值>


       例:insert Students(姓名,性别,出生日期)

                select '大宝','','1995/7/7' unionunion表示下一行)

                select '二宝','','19**/**/**'


2.    有两种方法

      a.使用delete删除数据某些数据

       语法:delete from <表名>[where <删除条件>]     

       例:delete from a where name='大宝'(删除表a中列值为大宝的行)  

       注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名

 

      b. 使用truncate table 删除整个表的数据

       语法:truncate table <表名>

     例:truncate table Stuff 

     注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能

                   用于有外建约束引用的表




3. 改  使用update更新修改数据         

       语法:update <表名> set <列名=更新值>[where <更新条件>]

   例:update Stuff set年龄=22 where 姓名='大宝'

   注意:set后面可以紧随多个数据列的更新值(非数字要引号);where子句是可选的(非数字要引号),

                   用来限制条件,如果不选则整个表的所有行都被更新





4.1


       语法:select <列名> from <表名>[where <查询条件表达试>][order by <排序的列名>[ascdesc]]  

          

   a.查询所有数据行和列

    例:select * from a

    说明:查询a表中所有行和


   b.查询部分行列--条件查询

    例:select i,j,k   from  a   where f=5

    说明:查询表af=5的所有行,并显示i,j,k3列


   c.在查询中使用AS更改列名

    例:select name as姓名 from a where  gender=''

    说明:查询a表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示


   d.查询空行

    例:select name from a where email is null

    说明:查询表aemail为空的所有行,并显示name列;SQL语句中用is null或者is not null

                  来判断是否为空行


   e.在查询中使用常量

    例:select name '杭州' as地址 from a

    说明:查询表a,显示name列,并添加地址列,其列值都为'杭州'


   f.查询返回限制行数(关键字:top percent)

    例1:select top 6 name from a

    说明:查询表a,显示列name的前6行,top为关键字(oracle中没有top关键字用rownum替代)

                         select   *   from   a where   rownum<6   

                2:  select top 60 percent name from a
                说明:查询表a,显示列name60%percent为关键字


   g.查询排序(关键字:order by, asc , desc

    例:select name 

      from a 

      where grade>=60 

      order by desc

    说明:查询表中成绩大于等于60的所有行,并按降序显示name列;默认为ASC升序


           h. SQL SELECT DISTINCT 语句

                   说明:在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出

                        不同(distinct)的值。

                        关键词 DISTINCT 用于返回唯一不同的值。

                   例:SELECT  DISTINCT   列名称   FROM   表名称

                               



4.2 模糊查询

         a.注意:like运算副只用于字符串,所以仅与charvarchar数据类型联合使用

                例:select * from a where name like '%'

                说明:查询显示表a中,name字段第一个字为赵的记录


         b.使用between在某个范围内进行查询

           例:select * from a where age between 18 and 20

                说明:查询显示表aage1820之间的记录


         c.使用in在列举值内进行查询例:

          例:select name from a where address in ('北京','上海','杭州')

         说明:查询表aaddress值为北京或者上海或者杭州的记录,显示name字段




4.3分组查询
          a.使用group by进行分组查询
             例:select studentID as学员编号,AVG(score) as平均成绩 (注释:这里的score是列名)
                     from Score (注释:这里的Score是表名)
                     group by studentID
            说明:在表Score中查询,按strdentID字段分组,显示strdentID字段和score字段的平均值;

                       select语句中只允许被分组的列和为每个分组返回的一个值的表达式,例如用一个列

                  名作为参数的聚合函数


         b.使用having子句进行分组筛选
            例:select studentID as学员编号,AVG(score) as平均成绩 (注释:这里的score是列名)
                   from Score (注释:这里的Score是表名)
                   group by studentID
                   having count(score)>1
            说明:接上面例子,显示分组后count(score)>1的行,由于where只能在没有分组时使用,

                  分组后只能使用having限制条件。




4.4.
多表联接查询

        a.内联接

           1).where子句中指定联接条件
            例:select a.name,b.chengji
                 from a,b
                 where a.name=b.name
           说明:查询表a和表bname字段相等的记录,并显示表a中的name字段和表b中的chengji字段

           2).from子句中使用join…on
          例:select a.name,b.chengji
                 from a inner join b
                 on (a.name=b.name)
         说明:同上。(查询表a和表bname字段相等的记录,并显示表a中的name字段和表b中的chengji字段)


       b.外联接

         1).左外联接查询
         例:select s.name,c.courseID,c.score
                 from strdents as s
                 left outer join score as c
                 on s.scode=c.strdentID
         说明:在strdents表和score表中查询满足on条件的行,条件为score表的strdentIDstrdents表中的sconde相同


         2).右外联接查询
         例:select s.name,c.courseID,c.score
                 from strdents as s
                 right outer join score as c
                 on s.scode=c.strdentID
         说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的scodescore表的strdentID相同





5.创建数据库

       语法:CREATE  DATABASE  数据库名称




6.创建表

       语法:CREATE   TABLE   表名称

                    (

                         列名称1  数据类型,

                         列名称2  数据类型,

                         ·········

                      )


          例:  create table customers

                    ( 

                       id int not null auto_increment,

                       name char(20) not null,

                       address char(50) null,

                       city char(50) null,

                       age int not null,

                       love char(50) not null default 'No habbit',

                       primary key(id)

               )