现在的位置: 首页 > 综合 > 正文

SQL简单语句

2018年03月18日 ⁄ 综合 ⁄ 共 6471字 ⁄ 字号 评论关闭

       http://www.1keydata.com/cn/sql/   这是一个关于SQL的不错的网站

本文来源  http://wenku.baidu.com/link?url=6DOYU89gEcs5w44T3dUQIXnfXzBB0Ui-90qhQrHeQ528za3j5QzBgkp638a9BIcEejG9anuTAZak_X2MjliZxx-g9DRyQCD8upoH-qUHK5e

1.数据库操作
  1.1 create database语句
     要创建一个数据库只要在create database语句中给出其名称即可。如:
     create database db_name;
     其中数据库的名字必须是合法的,该数据库必须存在,并且用户必须有足够的
     权限。

  1.2 drop database语句
     删除数据库需要用户有相应的权限。执行下列命令即可删除数据库:
     drop datdabase db_name;

     注意:
     不要轻易使用drop database语句,它将删除数据库及其中所有的表。在删除了
     一个数据库后,该数据库不可恢复。

  1.3 use语句
     use语句用来打开一个数据库,使其成为服务器中的默认(当前)数据库,例如:
     use db_name;

     用户必须对数据库具有一定访问权限,否则不能使用该语句。为了使用数据库中
     的表而选择数据库实际上不是必须的,因为可以利用db_name.tbl_name形式来引
     用它的表。但是不指定数据库限定词,引用表要方便的多。
     选择一个默认数据库并不代表在连接的持续时间内它都必须是默认的。用户可随
     时使用use语句在数据库之间进行切换,只要具有使用它们的权限即可。选择一个
     数据库也不限定用户只使用该数据库中的表。用户仍然可以通过使用数据库名限
     定表名的方法,引用其它数据库中的表。

2.添加和修改表
  2.1  create table语句
      用create table语句创建表。此语句的完整语法是相当复杂的,因为存在相当多
      可选子句,但在实际中此语句的应用是相当简单的。
      使用create table语句创建表时至少应该指出表名和表中字段的清单。例如:
      create table my_table
      (
          name char(20),
 age tinyint not null,
 weight int unsigned,
 sex enum('男','女')
       )
       
       在创建表时还可以说明它应该怎样索引,也可以不进行索引,以后再添加。如
       果计划在开始将表用于查询前,用大量的数据填充此表,再创建索引是一个很好
       的办法。在插入每一行时更新索引要比装载数据到一个未索引的表中然后再创建
       索引慢的多。

  2.2  create table if not exists语句  (表不存在时创建)
       若希望表不存在时才创建,可以使用create table if not exists语句。在一
       些应用程序中,无法确定要创建的表已经存在。if not exists在MySQL运行批
       量作业的脚本时极为有用。在这里,用普通的create table语句不是很好。因
       为作业在第一次运行时,建立这些表,如果这些表已经存在,则第二次运行时
       将出错。如果使用if not exists语句,就不会有问题。每一次运行作业时,像
       前面一样创建表,如果这些表已经存在,则在第二次运行时,创建表的操作失
       败,但是不会出错,这使得作业可以继续运行。

  2.3  create temporary table语句 (创建临时表)
       要想创建一个临时表,可以利用create temporary table语句,这些表会在会
       话结束时自动消失。使用临时表很方便,因为不必使用drop table语句来删除
       表,而且如果用户的会话没有正常结束,这些表也不会滞留。
      
  2.4  drop table语句  (删除表)
       相对来说,删除表要比创建表容易得多,因为删除表不用定制有关其内容的任何
       东西,只要指定其名称即可,例如:

       drop table tbl_name;

       MySQL对drop table语句作了一些扩充.
       首先,可以在同一条语句中指定多个表进行删除,例如:

       drop table tbl_name1,tbl_name2,...

       其次,如果不能确定一个表是否存在,但是希望如果它存在就删除。那么就可以
       在drop table语句中增加if exists限定条件,如果drop table语句中给出的表
       不存在,MySQL不会发出错误信息。例如:

       drop table if exists tbl_name;

       if exists在MySQL所用的脚本中很有用,因为在默认的情况下,MySQL将在出错
       的时候退出。比如说,有一个安装脚本能创建表,这些表将在其它脚本中继续
       使用。在这种情况下希望保证这个创建表的脚本在运行时没有后顾之忧。如果
       脚本在开始时使用普通的drop table语句,那么它在第一次运行时将会失败,
       因为这些表从未创建过。如果使用if exists限定,就不会产生这样的问题。当
       表已经存在时,将它们删除,否则,脚本继续运行。

3.创建和删除索引
   3.1 创建索引
       在执行create table语句时。可以为新表创建索引,也可以用create index或者
       alter table来为一个己有的表增加索引。create index是在MySQL3.23版本中
       引入的,但是如果使用MySQL3.23之前的版本,可以利用alter table语句创建
       索引。
       用户可以规定索引能否包含重复的值。如果不包含,则索引应该创建为primary key
       或uniuqe索引。对于单字段唯一索引,这样保证了字段不包含重复的值。对于
       多字段惟一索引,这样保证了值的组合不重复。
       primary key索引和uniuqe索引非常类似。实际上,primary key索引仅是一个
       具有名称的主键的惟一索引。这表示一个表只包含一个主键,因为一个表中不
       可能具有两个同名的索引。同一个表中可以有多个惟一索引。
       为了给现有的表增加一个索引,可以使用alter table或create index语句。前
       者是最常用的,因为它可以创建普通索引、惟一索引或主键索引,例如:
       
        alter table tbl_name add index index_name(column_list)
alter table tbl_name add uniuqe index_name(column_list)
alter table tbl_name add primary key index_name(column_list)

       其中tbl_name是要添加索引的表名,而column_list指出对那些字段进行索引。
       如果索引由不止一个字段组成,各字段名之间用逗号分开。索引名index_name
       是可选的,可以不给出,MySQL将根据第一个索引字段赋给它一个名称。alter
       table语句允许在单个语句中指定多个表的更改,因此可以同时创建多个索引。
       create index语句可以对表增加普通索引或惟一索引,例如:

         create unique index index_name on tbl_name (column_list)
create index index_name on tbl_name (column_list)

       tbl_name、index_name和column_list具有与alter table语句中相同的含义。
       这里索引名不可选。不能用create index语句创建主键索引。

   3.2 删除索引
       用户可以利用drop index或alter index语句来删除索引。类似于create index
       语句,drop index语句通常在内部作为一条alter table语句来处理,并且drop
       index语句是在MySQL3.23中引入的,删除索引语句的语法描述如下:

        drop index index_name on tbl_name
alter table tbl_name drop index index_name
alter table tbl_name drop primary key

       前两条语句是等价的,第三条语句只在删除primary key索引时用,在这种情况
       下不需要索引名,因为一个表只可能具有一个这样的索引。如果在创建索引时没
       有明确指明为primary key索引,则该表具有一个或多个惟一索引,MySQL将删除
       这些索引中的第一个。
       如果从表中删除了字段,则索引可能会受到影响。如果所删除的字段为索引的组
       成部分,则该字段也会从索引中被删除。如果组成索引的所有字段都被删除,则
       整个索引将被删除。

4.更改表
   4.1 对表重命名
       对表重新命名,可以使用alter table语句,只要给出旧表名和新表名就可以了,
       例如:
         alter table tbl_name rename as new_tbl_name

   4.2 更改字段类型
       更改字段类型,可以使用change或modify语句。假如表my_table中的某字段为
       smallint unsigned类型,希望将其更改为mediumint unsigned类型。可使用下
       面的语句:
         alter table my_tbl modify i mediumint unsigned
alter table my_tbl change i mediumint unsigned

       change命令除了能更改类型之外,还能更改字段的名称。

   4.3 将可变长字段转换为定长字段
       假如表chartbl具有varchar类型的字段,要将其转换为char类型。而且这个表创
       建语句如下:
        create table chartbl(name varchar(40), address varchar(80) )

       在这个表中,需要在相同的alter table语句中一次更改所有的字段。不可能一
       次一个字段地改完,原因是如果每次更改一个字段,MySQL注意到表仍然包含有
       可变长的字段,则会把已经更改过的字段重新转换为varchar类型以节省空间。
       为了处理这个问题。应该同时更改所有的varchar类型的字段,语句如下:

         alter table chartbl modify name char(40), modify address char(80)

       现在该表中的字段都被改为char类型了。此类操作很重要,本例也是alter table
       语句中同时进行多个动作的有力见证。
       注意,在希望转换这样的表时,如果表中存在blob或text类型的字段,将使转换
       表为定长行格式的操作失败。即使表中有一个可变长的字段都将会使表有可变长
       的行,因为这些可变长的字段类型没有定长的等价类型。

   4.4 将定长字段转换为可变长字段
       在上面的例子中,虽然chartbl用定长字段会使操作速度更快,但占有了更多的
       空间,因此将它转换为原来的形式可以节省空间。这种转换更容易,只需要将某
       个char类型的字段转换为varchar类型的字段,MySQL会自动的转换其它的char类
       型字段。要想转换chartbl表,可以用下列任一条语句:

         alter table chartbl modify name varchar(40)
alter table chartbl modify address varchar(80)

   4.5 转换表的类型
       如果需要将旧版本的ISAM表转换为MyISAM格式,可以执行如下操作:

         alber table tbl_name type=myisam

       这样做是因为MyISAM存储格式具有某些ISAM格式没有的索引特性,例如能够对
       NULL值、blob和text类型的字段类型进行索引。另一个原因是,MyISAM是独立
       于计算机的,可以将此类表直接复制到其它类型的计算机系统中,即使其具有
       不同的硬件体系结构。

       

SQL SELECT语句
  SQL SELECT语句以被选中的行的集合的形式从数据库中返回信息。SELECT语句被分成
  以下3个主要部分:
       .SELECT  SELECT列表允许指定查询将要返回的列。
       .FROM    FROM子句允许指定从哪些表中选取在SELECT列表中指定的列。
       .WHERE   可选的WHERE子句允许指定过滤标准来限制对行的选择。可以基于多
                个列来过滤查询。

一个最小的SELECT语句的语法形式为:
SELECT columns FROM  tables

要执行该操作,数据库引擎将在指定的表中搜索并且提取出选择的列。可以使
用一个星号(*)来选择一个表中所有的列。例如,下面的SQL语句将返回authors
表中所有的列与行:
SELECT * FROM authors

从一个表中返回所有数据可能不够高效。通过在语句的末尾加一个WHERE子句,
可以指定只返回符合某个条件的一些行。下面的例子将返回authors表中姓为
Ringer的行的所有列:
SELECT * FROM authors WHERE au_lname='Ringer'

注意例中括起Ringer的单引号(')的用法。单引号用于当WHERE子句中的值是一
个字符串的时候。在本例中,au_lname被数据库定义为一个字符串值。当在WHERE
子句中指定一个数值型值,就不使用单引号了,如下例所示:
SELECT * FROM titles WHERE royalty=10

  IN操作符
        通过在一个WHERE子句中使用IN操作符,可以只返回一些特定的行,在这些行
中,WHERE子句所指定的参数的值被包含在一个指定的列表中。例如,可以使
用IN操作符来返回住在Utah(UT)或Tennessee(TN)的作者的姓和状态编码,如
下例所示:
SELECT au_lname,state FROM authors WHERE state IN('UT','TN')

  BETWEEN操作符
        这个操作符返回一些被选中的行,在这些行中,WHERE参数在两个给定的条件
之间。注意日期用'yyyymmdd‘字符串格式来指定的。如下例所示:
SELECT * FROM titles WHERE pubdate BETWEEN '20080808' AND '20090630'

  LIKE操作符
        可以用LIKE操作符找到一个符合的匹配模式的列的值。你可以指定完整的值,
如在LIKE 'Smith'中,或者使用通配符来查找一个范围内的值(例如,LIKE 'Sm%')。
在下面的例子中,所有姓以字母S开头的作者的行都被返回了,样例如下:
SELECT au_lname FROM authors WHERE au_lname LIKE 'S%'

  ORDER BY子句
        默认情况下,返回的行的顺序是和它们进入数据库时的顺序是一样的。可选的
ORDER BY子句将对一个查询的结果在一个或一组指定的列上进行升序或降序排
列。ASC选项指定了按升序排列;DESC选项指定按降序排列。默认的排序顺序是
升序(A~Z,从0~9)。下面的例子从authors表中选择了所有的列,并且将它们按
作者的姓进行了降序排列。
SELECT * FROM authors ORDER BY  au_lname DESC

        
 
   

抱歉!评论已关闭.