SQL命令模板

SQL命令模板

1. 引言

MySQL是通过SQL来对数据库进行增删查改等操作的。SQL按照其功能可以划分为以下四种:

  1. DQL:数据查询语言,主要用来查询表中的数据,主要有select;
  2. DML:数据操作语言,主要用对表中的数据进行增,删与改,主要有insert,delete和update;
  3. DDL:数据定义语言,主要用来对数据表进行操作,主要有create,drop与alter;
  4. DCL:数据控制语言,用来授予或回收访问数据库的权限,并控制数据库操纵事物发生的时间及效果,对数据库实现实时监视等,主要有grant,rollback,commit。

2. 数据查询命令

2.1 简单查询:

查询一个字段或多个字段

select <field_name1, field_name2, ...> from <table_name>;
  • field_name:字段名;
  • table_name:表名。

2.2. 条件查询:

查询符合条件字段

select <field_name1, field_name2, ...> from <table_name> where <conditions>;
  • conditions:条件式,SQL条件式与Python大致相同(_表示一个字符,%表示一个字符串,如K%表示以“K开头”的字符串,使用’'取消转义)。

2.3. 排序查询:

按照排序方式查询字段

select <field_name1, field_name2, ...> from <table_name> order by <field_namei> <condition1>, <field_namej> <condition2>;
  • field_namei:首先按照字段field_namei进行排序;
  • field_namej:若field_namei的值相等,则按照字段field_namej进行排序;
  • condition:若为‘asc’,为升序,并且默认为升序排序;若为’desc’,则为降序排序。

2.4. 分组查询:

先对字段进行分组,再对每一组进行查询:

select <field_name1, field_name2, ...> from <table_name> group by <field_namei>, <field_namej> ;

分组查询中,select后面只能跟参加分组的字段以及分组函数。

select <field_name1, field_name2, ...> from <table_name> group by <field_namei>, <field_namej> having <condition>;

使用having可以对分组进一步过滤,having不能单独使用,必须结合group by一起使用。

2.5. 综合查询:

找出符合条件的字段,并按照排序方式查询

select <field_name1, field_name2, ...>
from <table_name>
where <conditions>
order by <field_namei> <condition1>, <fieldnamej> <condition2>;

找出分组的字段,并按照排序方式查询

select <field_name1, field_name2, ...>
from <table_name>
where <conditions>
group by <field_namei>, <field_namej>
order by <field_nameii> <condition1>, <fieldnamejj> <condition2>;

注意上面语句的执行顺序为:from - - > where - - > group by - - > select - - > order by

2.6. 子查询(嵌套查询)

select <select ...> from <select ...> where <select ...>

2.7. 连接查询

从一张表中单独查询,称为单表查询。多张表联合起来查询,称为连接查询。其中表连接的方式可以分为内连接与外连接。内连接是指仅连接两张表对应值相等的部分,而外连接则把两张表中没有对应的部分也连接在结果中。内连接又可以分为等值连接、非等值连接与自连接,而外连接可以分为左外连接与右外连接。
在连接查询中需要进行条件约束,如果没有条件约束时会发生笛卡尔积现象,即查询结果是两张表查询数量的乘积。如:

select <table_name1.field_name1>, <table_name2.field_name2> from <table_name1>, <table_name2>;
  1. 内连接之等值连接与非等值连接

    select <table_name1.field_name1>, <table_name2.field_name2>
    from <table_name1>
    inner join <table_name2>
    on <condition: table_name1.field_namei =\<\>\<>\... table_name1.field_namej>
    // where <conditions>
    
    • from table_name1 inner join table_name2:table_name1与table_name2内连接,其中inner可以省略;
    • on condition:两个表连接的条件;
    • where conditions:筛选条件。
  2. 内连接之自连接
    把一张表看作两张表,只不过别名不同。

  3. 外连接

    select <table_name1.field_name1>, <table_name2.field_name2>
    from <table_name1>
    right\left outter join <table_name2>
    on <condition: table_name1.field_namei =\<\>\<>\... table_name1.field_namej>
    // where <conditions>
    
    • 右连接:把关键字右边的表指定字段所有的项全部查询出来,左连接同理。
  4. 多表连接

    select <table_name1.field_name1>, <table_name2.field_name2>,...
    from <table_name1>
    <inner\outter> join <table_name2>
    on <condition: table_name1 and table_name2>
    <inner\outter> join <table_name3>
    on <condition: table_name1 and table_name3>
    ...
    

2.8. 其它语法

  1. union:把不同select查询的结果连接在一起,如

    select <field_name1, field_name2, ...> from <table_name> where <condition1>
    union
    select <field_name1, field_name2, ...> from <table_name> where <condition2>
    

    union的效率比表的效率要高,因为表连接匹配的次数满足笛卡尔积,而union把匹配的乘法变成了匹配的加法。不仅如此,union还可以拼接两个结果表。但是union连接的两张结果表必须具有相同的列数与类型。

  2. limit:限制显示的查询结果条数,如

    select <field_name1, field_name2, ...> from <table_name> where <condition> limit i, j
    
    • i,j:i表示显示的结果从下标i开始,j表示显示j条结果
  3. explain:查看查询的过程信息,如

    explain select <field_name1, field_name2, ...> from <table_name>;
    

2.9. 数据处理函数

有时从数据库表中获取到的数据须要进行一些处理。如将小写字母替换为对应的大写字母。这个处理过程能够在客户机上进行。也能够在数据库上进行。数据库上进行会更高效。数据库中有对应的数据处理函数来处理这些数据,可是在SQL中使用特殊的数据处理函数会减少其可移植性。不同的DBMS系统,其数据处理函数不同。

大多数的SQL支持下面类型的函数:

  • 用于处理文本串的函数,如删除、填充值、转换大写和小写;
  • 用于在数值数据上进行算术操作的函数;
  • 用于处理日期和时间值并从这些值中提取特殊成分;
  • 返回DBMS正在使用的特殊信息的系统函数,如返回用户登录,检查版本号。

3. 数据定义命令

3.1. 操作数据库、表格或用户

  1. 创建对象

    create database/table/user <name> <...>
    
    • name:创建对象的名称;
    • <…>:创建对象的描述,例如如果是user则可以规定其密码,如果是表格则可以规定其表格的字段。
  2. 删除对象

    drop database/table/user <name>
    // drop database/table/user if exists <name>
    // truncate table <table_name>
    
    • drop是直接把表删除,而truncate则是把表中的数据完全删除,表仍然存在。
  3. 修改对象

    1. 修改表格名称
    	alter table <old_table_name> rename <new_table_name>;
    2. 增加字段
    	alter table <table_name> add <column> <value_type>;
    3. 删除字段
    	alter table <table_name> drop <column>;
    4. 修改字段
    	alter table <table_name> change <old_column> <new_column> <new_value_type> ;
    

3.2. 约束

在创建表的时候,可以给表添加一些约束(constriant),在向表插入数据的时候需要满足约束条件,以保证表中数据的完整性和有效性。约束主要包括非空约束(not null),唯一性约束(unique),主键约束(primary key),外键约束(foreign key)。约束条件常写在字段数据类型的后面,并且约束可以分为列级约束与表级约束。

  1. 列级约束
    约束条件直接放在字段名的后面。

    create table <table_name>(<column1 value_type1 <constriant1, ...>, column2 value_type2 <constriant2, ...>, ....>);
    
    • constrianti:字段columni的约束条件。
  2. 表级约束
    约束条件放在所有的字段名的后面。

    create table <table_name>(<column1 value_type1, column2 value_type2, ....>, <constriants>);
    
    • constriants:多个字段之间的约束条件

可以在表格创建的时候指定主键的字段,被指定为主键的值不能为NULL且唯一。后续每一行数据都可以用主键取得。一张表只能有一个主键,包括单一主键(一个字段)和复合主键(多个主键)或者分为自然主键(一个自然数)或业务主键。

create table <table_name>(<column1 value_type1 <primary key, ...>, column2 value_type2 <constriant2, ...>, ....>);
// create table <table_name>(<column1 value_type1, column2 value_type2, ....>, <primary key(column1), ...>);
  • 指定column1为主键

外键约束的功能是使插入某个表的数据的值位于规定范围内,而这个范围又在另一张表中定义,所以为了约束插入的表,需要使用外键约束。

create table <table_name1>(no int primary key);
create table <table_name2>(no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) reference <table_name1>(no));
  • <table_name1>:父表;
  • <table_name2>:子表,需要先生成父表再添加子表。

3.3. 添加索引

给数据表的某一个字段添加索引,有利于增加搜索速度,创建索引的方式如下:

create index <table_name>_<column>_index on <table_name>(<column>);

删除索引的方式如下:

drop index <table_name>_<column>_index on <table_name>;

4. 数据操作命令

  1. 对表格插入对象:

    insert into <table_name>(<column1, column2, ....>) values(<value1, value2, ...>)(...)(...)
    
    • columni:字段名;
    • valuei:对应字段columni的值,必须要满足预先规定的数据类型。

    insert只会插入新的一行,不能修改原有的数据。

  2. 修改表格已有的数据:

    update <table_name> set <column1> = <value1>, <column2> = <value2>, ... where <condition> 
    
    • = :把新的值value1赋给column1;
    • :指定需要修改的对象。如果不加条件,那么修改所有的对象。
  3. 删除表格数据:

    delete from <table_name> where <condition>
    
    • :指定需要删除的对象。如果不加条件,那么删除所有的对象。

    delete删除表中数据,但是数据还在硬盘中存在。缺点是效率比较低,但是支持回滚。而truncate属于物理删除,效率比较高,但是不支持回滚。

5. 数据控制命令

  1. 管理用户权限:
    授于用户权限。

    grant <privileges> on <database_name>.<table_name> to <'username'>@'localhost' <with grant option>;
    

    撤销用户权限。

    revoke <privileges> on <database_name>.<table_name> from <'username'>@'localhost';
    
  2. 事务操作:

    事务操作包括事务提交与事务回滚,提交事务如下:

    begin <work>;
    ...
    commit <work>;
    

    提交事务之后,意味着事务停止。
    事务回滚只适用于回滚数据操作命令(DML),而不适用于数据定义命令(DDL)。需要注意的是rollback只会回滚到上一次提交的状态,MySQL支持自动提交功能,所以使用回滚之前需要先输入start transaction关闭自动提交机制。

    start \ begin transaction;
    rollback
    

6. SQL总结

本文只是给出了SQL使用的一些模板,具体内容还需要与实际结合。

版权声明

转载请注明出处

博客模块使用说明书 附加SQL Server 2000数据库 (1)将App_Data文件夹中的两个文件拷贝到SQL Server 2000安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击“ ”按钮,选择所要附加数据库的.mdf文件,单击“确定”按钮,即可完成数据库的附加操作。 配置IIS (1)依次选择“开始”/“设置”/“控制面板”/“管理工具”/“Internet信息服务(IIS)管理器”选项,弹出“Internet信息服务(IIS)管理器”窗口,如图1.1所示。 图1.1 “Internet信息服务(IIS)管理器”窗口 (2)选中“默认网站”节点,单击右键,选择“属性”,如图1.2所示。 图1.2 选择“属性”菜单项 (3)弹出“默认网站 属性”对话框,如图1.3所示,单击“网站”选项卡,在“IP地址”下拉列表中选择本机IP地址。 图1.3 默认网站 属性 (4)单击“主目录”选项卡,如图1.4所示。单击“浏览”按钮,弹出“浏览文件夹”对话框,选择您的网站路径,单击【确定】按钮。 图1.4 “主目录”选项页 (5)选中首页文件,单击鼠标右键,在弹出的菜单中选择“浏览”菜单项。 使用说明 使用该程序,读者需要下载:FreeTexBox..dll和URLRewrite.dll(这两个.dll文件可在微软官方网站上下载)。粘贴到Bin文件夹下。 运行“BlogIndex.aspx”文件,进入主页面,如图1.5所示。在本博客世界中,用户可注册自己的博客帐户,然后添加文章,并将其显示在博客首页中。 图1.5 程序主页面 单击用户登录处的“注册”按钮,注册博客帐户,然后进行登录,进入个人博客管理页面,如图1.6所示。在这里可用户可添加文章及管理文章,还可添加个人通讯录。 图1.6 个人博客管理页面 单击用户登录处的“管理员登录”超链接,进入管理员登录页面,如图1.7所示。输入管理员密码mrsoft,及验证码,单击“确定”按钮,进入后台主页面,如图1.8所示。在后台,管理员可管理注册的博客用户信息、评论信息、留言信息、文章类型等。 图1.7 管理员登录页面 图1.8 后台管理主页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值