语法入门SQL是一种语言被设计用来检索及管理关系数据库中的_第1页
语法入门SQL是一种语言被设计用来检索及管理关系数据库中的_第2页
语法入门SQL是一种语言被设计用来检索及管理关系数据库中的_第3页
语法入门SQL是一种语言被设计用来检索及管理关系数据库中的_第4页
语法入门SQL是一种语言被设计用来检索及管理关系数据库中的_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL据库语言,被设计用来检索及管理关系数据库中的数据。SQLStructuredQueryLanguag本指南是一本非常详细的基础,涉及常用SQL语言的所有知识点,能够让你对SQL的语法和语义有个清晰适用本参考的目的在于帮助初学者深入浅出地学习SQL语言。学习前 第1 SQL概 关系型数据库管理系 数据 语 数据类 操作 表达 创建数据 删除数据 选择数据库,USE语 创建 删除 INSERT语 SELECT语 WHERE子 UPDATE语 DELETE语 LIKE子 ORDERBY子 GROUPBY子 DISTINCT关键 对结果进行排 第2 SQL进 约 使用连 UNION子 NULL 别 索 ALTERTABLE命 使用视 HAVING子 事 通配 日期函 临时 克隆数据 子查 使用序 注 第3 SQL常用函 COUNT函 MAX函 MIN函 AVG函 SUM函 RAND函 CONCAT函 COUNT函 COUNT函 11概SQL是结构化查询语言(StructuredQueryLanguage),一种用于、操作或者检索在关系型数据库SQL是关系型数据库系统(RelationDatabaseSystem)的标准语言。所有的关系型数据库管理系统,例如MySQL、MSAccess、Oracle、Sybase、Informix、PostgresSQL和SQLServer,都使用SQL作为其当然,它们用的都是不同的SQL方言。例如微软SQLServer使用的T-?Oracle使用的是?微软的AccessSQLJETSQL(本地格式)?允许用户关系型数据库中的数?允许用户对数据做出描?允许用于定义数据库中的数据?允许用户创建或删除数据库和?允许用户在数据库中创建视图、过程和函?允许用户对表、过程和视 1970年,IBM·科德博士提出了一种数据库关系模型,他因此被称作关?1974询语?1978年,IBM对Codd概念进行了深入研究,并发布了一款名为System/R的产品?nalSoftware——Oracle的前身——发布了第一款商业关系型数据库产品。SQLRDBMSSQL据库管理系统都会判断出执行请求的最佳方式SQL擎推算这一流程涉及到了各种各样的组件,包括查询调度器(QueryDispatcher)、优化引擎(OptimizationEngines)、经典查询引擎(ClassicQueryEngine)和SQL查询引擎(SQLQueryEngine)等等。经典查询引擎用于处理所有的非SQL查询,而SQL查询引擎则不处理逻辑文件。下面这张简要说明了SQL1.1SQLArchitectureSQL用于与关系型数据库交互SQLCREATE、SELECT、INSERT、UPDATE、DELETEDRO命描创建新的表、视图或者其他修改现存数据库对象,比如删除表、视图或者数据库中数据语命描创建一条新记修改删除命描赋予收回关系型数据库管理系统RDBMS是关系型数据库管理系统(RelationalDataBaseManagementSystem)的缩写,它SQL以及所有现代数据库系统,例MSSQLServer、IBMDB2、Oracle、MySQLMSAccess等的基础。关系型数据库管理系统(RDBMS)是一种基于E.F.科德关系模型的数据库管理系统RDBMS中的数据在被称作表的数据库对象中。表是相互关联的数据记录的集合,由一系列的行和列组成。+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 ALARY五个字段。一个字段限定了数据表中的列,被用 记录或者说数据行是存在于数据表中的独立条目。例如,上面的表中有7条记录。下面是表中+++++++|1|Ramesh|32|Ahmedabad|2000.00 记录就是表中水平排列的数例如,上面的表中有字段为ADDRESS的列,了客户的地址,其内容如下所示++|++|+|Ahmedabad| | | | |||| 什么是NULLNULL值是表中以空白形式出现的值,表示该记录在此字段处SQLSQL常见的约束?NOTNULL数据NULL???主键:唯一标识数据表中的行/记?外键:唯一标识其他 约束:?索引:用于在数据库中快NOTNULL束,以指明该字段不接受NULL值。示例E和AGE——被指定为NOTNULL:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,PRIMARYKEY对于OracleMySQL说,如CUSTOMERS表已经存在,此时再要给SALARY段添NOTALTERALTERTABLEMODIFYSALARYDECIMAL(18,2)NOTDEFAULT约示例5000。因此INSERTINTO为该字段提供值的话,该字段就为5000。CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,2)DEFAULT5000.00,PRIMARYKEY(ID)如果CUSTOMERS经存在,此时SALARYDEFAULT的话,你需要类似下面的语ALTERALTERTABLEMODIFYSALARYDECIMAL(18,2)DEFAULT删除DEFAULT约束DEFAULT的话,请使用SQLALTERALTERTABLEALTERCOLUMNSALARYDROPUNIQUE约示例例如,下SQL语句创建了一个名CUSTOMERS的新表,并添加了五个字段AGE字段被设UNIQUE,于是任意两条记录的AGE都不同:CREATETABLECUSTOMERS(CREATETABLECUSTOMERS(IDNOTNAMEVARCHAR(20)NOTNULL,AGEINTNOTNULLUNIQUE,ADDRESSCHAR(25),SALARYDECIMAL(18,2),PRIMARYKEY(ID)ALTERALTERTABLEMODIFYAGEINTNOTNULLALTERALTERTABLEADDCONSTRAINTmyUniqueConstraintUNIQUE(AGE,UNIQUEALTERALTERTABLEDROPCONSTRAINTALTERALTERTABLEDROPINDEX主主键是数据表中唯一确定一条记录的字段。主键必须包含唯一值,并且不能为NULL创建主键CREATETABLECUSTOMERS(CREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20)NOTNULL,AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,2),PRIMARYKEY(ID)ALTERTABLECUSTOMERADDPRIMARYKEY如果CUSTOMERS表已经存在了,ALTERTABLECUSTOMERADDPRIMARYKEY注意:如果你要使用ALTERTABLE语句来添加主键,那么主键所在的列必须已经被为NOTNULL了。要用多个字段来定义主键的话,请使用如下SQL语法:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,2),PRIMARYKEY(ID,如果CUSTOMERS经存在,此时IDNAMES定义为主键的话,请使SQL语法ALTERALTERTABLEADDCONSTRAINTPK_CUSTIDPRIMARYKEY(ID,删除主ALTERALTERTABLECUSTOMERSDROPPRIMARYKEY外示例考虑如下两个表CUSTOMERS表:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,2),PRIMARYKEY(ID)ORDERS表CREATECREATETABLEORDERS( NOTNULL, CUSTOMER_IDINTreferences PRIMARYKEY如果ORDERS表已经存在,并且没有设置外键,那么可以使用下面的语法来修改数ALTERALTERTABLEADDFOREIGNKEY(Customer_ID)REFERENCESCUSTOMERS删除外键约束要删除外键约束的话,语法DROPFOREIGNCHECK约CHECK约束使用某一条件来对记录中的值进行检查。如果条件最终为假(false),即约束条件不能得到满示例段设置了CHECK约束,以 低于18的顾客:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOT如果CUSTOMERS经存在,再要AGE字段设CHECK的话,就需要像下面SQL句ALTERALTERTABLEMODIFYAGEINTNOTNULLCHECK(AGE>=18ALTERALTERTABLEADDCONSTRAINTmyCheckConstraintCHECK(AGE>=CHECKALTERALTERTABLEDROPCONSTRAINT索获得一个ROWID(在数据进行排序之前)。决于SQL查询最常用到到哪些字段。示例CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),SALARYDECIMAL(18,2),PRIMARYKEY(ID)CREATECREATEINDEXONtable_name(column1, 例如,可以在AGE字段上创建索引,以优化对特定的顾客的查询,其语法如下所示CREATEINDEXidx_ageONCREATEINDEXidx_ageONCUSTOMERS(AGE);删除索引约束要删除索引约束的话,可以使用下面的SQL语句ALTERALTERTABLEDROPINDEX下面几类数据完整性存在于各个RDBMS中:?实体完整性:表中没有重复的?域完整性:通过限制数据类型、格式或者范围来保证给定列?参照完整性:不能删除被其他记录的?用户定义完整性:施加某些不属于上述三种完整?消除冗余数据,例如相同数据出保证?定义需要的数据项,因为这些项将会成为数据表中的字段。将相关的数据项放在一?保证不存在重复的数据?保证有一个主键1NF的第一规则:例如,将所有与会议地点相Location中,将所有同与会成员相关的MemberDetails表1NF的第二规则:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR(20) NOTNULL,AGEINT NOTNULL,ADDRESSCHAR(25),ORDERSTripod但是,按照1NF须保证没有重复的数据集合。所以,可以将上表分成两部分,然后使用一个键将两个表连CUSTOMERS表:CREATETABLECUSTOMERS(IDCREATETABLECUSTOMERS(IDINTNOTNAMEVARCHAR NOTADDRESSADDRESSCHAR(25),PRIMARYKEY(ID)表中记录如下ORDERS表CREATECREATETABLEORDERS(IDINT NOTNULL,CUSTOMER_IDINT NOTNULL,ORDERSVARCHAR(155),PRIMARYKEY(ID)表中记录如下Tripod1NF的第三规则: 顾客ID、顾 、订单ID、订单明细以 CREATECREATECUSTOMERS(CUST_IDNOTNULL,CUST_NAMEVARCHAR(20) NOTNULL,ORDER_IDINT NOTNULL,ORDER_DETAILVARCHAR(20)NOTNULL,SALE_DATEDATETIME,PRIMARYKEY(CUST_ID,该表符合第一范式,因为它满足第一范式的所有规则。表中的主键有CUST_IDORDER_ID。二者一起作为不依赖CUST_ID,因CUST_IDORDER_DETAILSALE_DATE之间并不存在联系。首先,创建如下的数据表来CREATECREATECUSTOMERS(CUST_IDNOTNULL,CUST_NAMEVARCHAR(20) NOTNULL,PRIMARYKEY(CUST_ID)CREATECREATETABLEORDER_IDINT NOTNULL,ORDER_DETAILVARCHAR(20)NOTNULL,PRIMARYKEY(ORDER_ID)CREATECREATETABLECUSTMERORDERS(CUST_ID NOTORDER_IDINT SALE_DATEDATETIME,PRIMARYKEY(CUST_ID,一个数据表符合第三范式?符合第二范式?所有的非主键字段都依赖于 (zipCode)之间存在密不可分的关系。CREATECREATECUSTOMERS( VARCHAR(20) PRIMARYKEY和地址之间的关系称作传递相关性(transitivedependency)。要使得数据表符合第三范式,需要将街道、城市、省份等字段移到另一张表中,可以称其为ZipCode表:CREATECREATETABLE PRIMARYKEYCREATECREATECUSTOMERS( VARCHAR(20) PRIMARYKEY(CUST_ID),如地址分别在个或四不同的据表,那任何的变,需要MySQL是一个开源SQL据库管理系统,由瑞典公司MySQLABMySQL的发音为“myess-que-ellSQL发音则为“sequel”。MySQL对多种平台都有良好的支持,包括Windows、主要的Linux版、UNIX和MacOS?1994MichaelWideniusDavidAxmarkMySQL?第一个内部版本1995523日发布?19988发布Windows版,支持Windows95WindowsNT?3.23版:20006beta,20011月产品发布?4.020028beta版20033月产品发布?4.0120038betaJyoti开始采用MySQL据库?4.120046发布beta200410布?5.0:20053发布beta,200510月产品发布?2008226日,SunMySQLAB?5.1:20081127?高性?高可用?可扩展性和灵活?健壮的事务(Transaction)支?在网络和数据仓库方面见?全面的数据库应用开发支?管理方?开源、24x7?总体费用最低MSSQL?T-?ANSI-?1987年,Sybase公司发布了用UNIXSQLServer?1988微软、SybaseAston-TateSQLServer植到OS/2?1989年,微软、SybaseAston-Tate将SQLServerOS/2SQLServer1.01990,SQLServer1.1布,该版本包含对Windows3.0的支持?Aston-TateSQLServer开发?2000年,微软发SQLServer2000?2001微软发布XMLforSQLServerWebRelease12002微软发SQLXML2.0(XMLforSQLServer而来)?2005117微软发SQLServer2005?高性?高可用?数据库镜?数据库快?CLR?服?数据库定义语言(DDL)触发?函?基于行版本控制的级?XML??数据库邮Oracle是一款由甲骨文公司开发的大型多用户关系型数据库管Oracle能够在多个终端在网络中同时发送请求和数据的情况下,有效管理它的资源——整个数据库对于客户端/服务器架构的计算需求来说,Oracle绝佳的选择。Oracle持所有主流的操作系统的客户端和服务器版,包括MSDOS、NetWare、UnixWare、OS/2和大多数类UNIX系统。 1977年,拉里·、鲍勃·迈纳和爱德·奥茨共同创建了软件开发(SoftwareDevelopment?1979年,Oracle2.0一款商业关系型数据库管理系统,也是第一款SQL库。公司也在这一年更名为RelationalSoftwareInc(RSI)。?1981,RSI司开始为Oracle发工具软件?1982年,RSIOracleCorporation 1983,Oracle3.0版由C成,并且开始加入多平台支?1984年,Oracle4.0发布,这一版开始加入并发控制、版本间一致性(multi-versionreadconsiste?2007,OracleOracle11g,新版数据库着力于对数据库分区更好的支持以及更容易进行数据迁移?并发?一致?锁机支持?可移植?自管理能???调度?资源管理?数据库仓?物化视?位图索?并行执?SQL分析函数(ytic?数据挖?分区MSAccess是微软最受欢迎的产品之一,它是一款级的数据库管理系统。对于小型项目来说,Access宜,而且功能强大。?1992年,Access1.0布?1993年,Access1.1布,提升了与AccessBasic语言?Access最重要的转变发生Access97Access2000过程中?2007,Access2007版开始支持新的数据ACCDB,该格式支持诸如多值字段和附加字段等复杂 用户可以创建表、查询、表单和报表等,并可以用宏(macro)将其组合在一起?支持以多种格式导入和导出数据,包Excel、Outlook、ASCII、dBase、Paradox、FoxPro、SQLServer、Oracle、ODBC等。?其专有格式为Jet数据库格式(MDB,Access2007本为ACCDB),该格式可以在一个文件中同??Access是一款基于文件服务器的数据库。同其他客户端/服务器关系型数据库管理系统(RDBMS)不同,Access没有内建对数据库触发器、 语有一点需要特别注意:SQL不区分大小写,也就是SELECTselectSQL语句中有相同的含义。然而,MySQL在表的名称方面并不遵循此规定。所以,如果你在使MySQL的话,你需要在程序中严格按照它本列出的所有的例子都在MySQL下进行了测试SQLSELECTSELECTSELECTcolumn1,column2. SQLT子SELECTSELECTDISTINCTcolumn1,column2. SQLWHERE子SELECTSELECTcolumn1,column2.FROMtable_nameWHERECONDITION;SQLAND/ORSELECTSELECTcolumn1,column2. WHERECONDITION-1{AND|OR}CONDITION-SQLINSELECTSELECTcolumn1,column2. WHEREcolumn_nameIN(val-1,val-2,.val-SQLBETWEEN子SELECTSELECTcolumn1,column2. WHEREcolumn_nameBETWEENval-1ANDval-SQLLKSELECTSELECTcolumn1,column2. WHEREcolumn_nameLIKE{PATTERNSQLORDERBYSELECTSELECTcolumn1,column2.WHEREORDERBYcolumn_nameSQLGROUPBYSELECTSELECTSUM(column_name)FROMtable_nameWHEREGROUPBYSQLCOUNT子SELECTSELECTCOUNT(column_name)FROMtable_nameWHERESQLHAVING子SELECTSELECTSUM(column_name)FROMtable_nameWHEREGROUPBYHAVING(arithematicfunctionSQLCREATETABLE语CREATECREATEtable_name(column1column2datatype,column3columnNPRIMARYKEY(oneormorecolumnsSQLDROPTABLE语DROPDROPTABLESQLCREATEIE语CREATECREATEUNIQUEINDEXONtable_name(column1,SQLDROPINDEX语ALTERALTERTABLEtable_nameDROPINDEXSQLDESC语DESCDESCSQLTRUNCATETABLE语TRUNCATETRUNCATETABLESQLALTERTABLE句(重命名ALTERALTERTABLEtable_nameRENAMETOSQLINSERTINTO语INSERTINSERTINTOtable_name(column1,column2.VALUES(value1,value2.SQLUPDATE语UPDATEUPDATESETcolumn1=value1,column2=value2...columnN=valueN[WHERECONDITION];SQLDELETEDELETEDELETEFROMtable_nameWHERE{CONDITION};SQLCREATEDATABASE语CREATECREATEDATABASESQLDROPDATABASE语DROPDROPDATABASESQLUSEUSEUSESQLCOMMIT语SQLROLLBACK语数据SQLServer提供了六种数据类型供数据下上--00110^38-10^38-数据下上-1.79E+1.79E+-3.40E+3.40E+数据下上Jan1,31-Dec-1-Jan-一个日期数June30,一个时间数12:30数据下上231字符Unicode数据SQLServer变长非Unicode字符数据,最大长度2,147,483,647字符d数据描最大长度231字符(SQLServer2005)。(Unicode串最大长度1,073,741,823字符。(变长Unicode字符串数据描最大长度8000字节。(定长二进制数据最大长度8000字节。(变长二进制数据最大长度2,147,483,647字节。(变长二进制数据数据描XML数据。你可以在列或者变量中XML实例。(仅限SQLServer2005)操作每个操作符都是一个保留字,主要用于在SQL语句的WHERE子句中执行,例如比较和算术运算等。?算术运算?比较运算?逻辑运算用于SQL算术运算这里一些有关SQL算术运算符如何使SQL>SQL>select10++|10+20+++ 30 SQL>select10*+|10*20+++|200 SQL>select10/+|10/5+|2.0000++++1rowinset(0.03SQL>select12%++|12%5+++ 2 操作描示+相加:将符号两边的数值加ab-*a*b/相除:用右边的操作数除以ba%baSQL比较运算SQL>SQL>SELECT*FROM |ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 7rowsinset(0.00下面是一些关于如何使用SQL比较运算符的简单SQL>SQL>SELECT*FROMCUSTOMERSWHERESALARY> |ID| |AGE|ADDRESS|SALARY |4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|7|Muffy|24|Indore|10000.00 3rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHERESALARY= |ID|NAME|AGE|ADDRESS|SALARY |1|Ramesh|32|Ahmedabad|2000.00 |2000.00 2rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHERESALARY!= |ID| |AGE|ADDRESS|SALARY |2|Khilan|25|Delhi|1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|6|Komal|22| |4500.00|7|Muffy|24|Indore|10000.00 5rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHERESALARY<> |ID| |AGE|ADDRESS|SALARY |2|Khilan|25|Delhi|1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|6|Komal|22| |4500.00|7|Muffy|24|Indore|10000.00 5rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHERESALARY>= |ID| |AGE|ADDRESS|SALARY |4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|7|Muffy|24|Indore|10000.00 3rowsinset(0.00操作描示=检查两个操作数的值是否相等,是的话返回true检查两个操作数的值是否相等,如果不等则true检查两个操作数的值是否相等,如果不等则true(ab)真><(ab)trueSQL逻辑运算SQL>SQL>SELECT*FROM |ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 7rowsinset(0.00下面是一些关于如何使用SQL逻辑运算符的简单SQL>SQL>SELECT*FROMCUSTOMERSWHEREAGE>=25ANDSALARY>= |ID| |AGE|ADDRESS|SALARY |4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00 2rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHEREAGE>=25ORSALARY>= |ID| |AGE|ADDRESS|SALARY |1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|7|Muffy|24|Indore|10000.00 5rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHEREAGEISNOT |ID| |AGE|ADDRESS|SALARY |1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|3|kaushik|23| |2000.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|6|Komal|22| |4500.00|7|Muffy|24|Indore|10000.00 7rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHERENAMELIKE |ID|NAME|AGE|ADDRESS|SALARY |6|Komal|22| |4500.00 SQL>SELECT*FROMCUSTOMERSWHEREAGEIN(25,27 |ID| |AGE|ADDRESS|SALARY |2|Khilan|25|Delhi|1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00 3rowsinset(0.00SQL>SELECT*FROMCUSTOMERSWHEREAGEBETWEEN25AND |ID| |AGE|ADDRESS|SALARY |2|Khilan|25|Delhi|1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00 3rowsinset(0.00SQL>SELECTAGEFROMWHEREEXISTS(SELECTAGEFROMCUSTOMERSWHERESALARY> |AGE |32|25|23|25|27|22|24 7rowsinset(0.02SQL>SELECT*FROMWHEREAGE>ALL(SELECTAGEFROMCUSTOMERSWHERESALARY> |ID|NAME|AGE|ADDRESS|SALARY |1|Ramesh|32|Ahmedabad|2000.00 1rowinset(0.02SQL>SELECT*FROMWHEREAGE>ANY(SELECTAGEFROMCUSTOMERSWHERESALARY> |ID| |AGE|ADDRESS|SALARY |1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00 4rowsinset(0.00运运算 描ALLANY给定最小值和最大值,BETWEENINLIKEORSQLIS UNIQUEE表达表达式是一个或者多个值、运算符和SQL函数的组合。每个表达式都有值,通过求SQL表达式看起来就像数学一样,它们以查询语言写就。你也可以用它们在数据库中查询符合特定条件的数考虑如下所示的SELECT语法SELECTSELECTcolumn1,column2,columnNFROMtable_nameWHERESQL表达式有很多种不同的布尔表达SQL布尔表达式以单值条件检索数SELECTSELECTcolumn1,column2,columnNFROMtable_nameWHERESINGLEVALUEMATCHTING考虑如下所示的表SQL>SQL>SELECT*FROM |ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 7rowsinset(0.00下面是一个展示SQL布尔表达式的简单例子SQL>SQL>SELECT*FROMCUSTOMERSWHERESALARY= |ID|NAME|AGE|ADDRESS|SALARY |7|Muffy|24|Indore|10000.00 数值表达数值表达式用于在查询中执行数算。其语法如下SELECTSELECTnumerical_expressionasOPERATION_NAME[FROMtable_nameWHERECONDITION]这里numerical_expression为数算或者任何。下面是一个说明SQL数值表达式用法的简单例子SQL>SQL>SELECT(15+6)AS+|ADDITION+++ 21 SQL一系列的内建函数,例如avg()、sum()、count,这些函数用于在表上或者表中的特定列上执行聚SQL>SQL>SELECTCOUNT(*)AS"RECORDS"FROM |RECORDS+|++7+时间表达SQL>SQL>SELECT+|++|+|2009-11-1206:40:23 下面是一个日期SQL>SQL>SELECT | |2009-10-2212:07:18.140 创建数SQLCREATEDATABASE句用于创建新的SQLCREATECREATEDATABASE在RDBMS中,数据库的名字如果你先想要创建一个新<testDB>,那么CREATEDATABASE句应该这么SQL>SQL>CREATEDATABASE删除数SQLDROPDATABASE除现DROPDROPDATABASE无论任何时候,RDBMS中数据库的名字都应该是唯一如果你想要删除<testDB>,那么DROPDATABASE句应该这么SQL>SQL>DROPDATABASE注意:执行数据库删除操作应当十分谨慎,因为数据库一旦删除,的所有数据都会丢失SQL>SQL>SHOW+|++|+|information_schema| | |||+|||+6rowsinset(0.00选择数据库,USESQLUSE语句用于选取当前数据库架构中存在的任一数据库USEUSEUSE再次强调,RDBMS中数据库的名字应该唯按照以下方式查看所有可用SQL>SQL>SHOW+|++|+|information_schema| | |||+|||+6rowsinset(0.00AMROOD的话,可以执行下面SQL它,然后开始执行你SQL>SQL>USECREATETABLE的基本语法如下所CREATECREATEtable_name(column1column2datatype,column3columnNPRIMARYKEY(oneormorecolumns识符)紧跟在CREATETABLE后面。下面的示例创建CUSTOMERS主键为ID,某些字段具NOTNULL束,表示在创建新的记录时这些字段不能为NULL。SQL>CREATETABLECUSTOMERS(IDINTSQL>CREATETABLECUSTOMERS(IDINT NAMEVARCHAR(20) AGEINT NOTNULL,ADDRESSCHAR(25),PRIMARYPRIMARYKEY SQLDROPTABLE于移除表定义以及表中所有的数据、索引、触发器、约束和权限设置。DROPDROPTABLE返回结果表明CUSTOMERS表在数据库中,接着让我们用下面令删除它SQL>SQL>DROPTABLEQueryOK,0rowsaffected(0.01SQL>SQL>DESCERROR1146(42S02):Table'TEST.CUSTOMERS'doesn't是SR语句SQLINSERTINTO语句用于向数据库中的表添加INSERTINTO有两种基本的语法,第一种语法格INSERTINSERTINTOTABLE_NAME(column1,column2,column3,...columnN)VALUES(value1,value2,value3,...valueN);这里column1,column2,...columnN是表中字段的名字,你必须为新记录的这些字INSERTINSERTINTOTABLE_NAMEVALUES下面的语句将在CUSTOMERS中创建六条新INSERTINSERTINTOCUSTOMERSVALUES(1,'Ramesh',32,'Ahmedabad',2000.00INSERTINTOCUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)VALUES(2,'Khilan',25,'Delhi',1500.00);INSERTINTOCUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)VALUES(3,'kaushik',23,'Kota',2000.00);INSERTINTOCUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)INSERTINTOCUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)VALUES(5,'Hardik',27,'Bhopal',8500.00);INSERTINTOCUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)VALUES(6,'Komal',22,'MP',4500.00);你也可以使用第二种语法在表中创建一条新INSERTINSERTINTO +++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 你还可以用SELECT语句将一个表中相应字段的数据填充到另一个表中,其语法形INSERTINSERTINTOfirst_table_name[(column1,column2,...columnN)]SELECTcolumn1,column2,...columnNFROMsecond_table_name[WHEREcondition];SELECTSQLSELECT据库的表中取回所需的数据,并以表的形式返回。返回的表被SELECT的基本语法如下SELECTSELECTcolumn1,column2,columnNFROM这里,column1,column2...是你想要从表中取回的字段。如果要取回表中所有字段的话,可以使用SELECT*SELECT*FROM考虑CUSTOMERS表,该表包含的记录如+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的例CUSTOMERS获取ID、Name和Salary段SQL>SQL>SELECTID,NAME,SALARYFROM运行结果如下所+++|ID| +|SALARY+++|1|Ramesh|2000.00|2|Khilan|1500.00||3|kaushik|2000.00|4|Chaitali|6500.00|5||6||7| |8500.00|4500.00++如果想要取回CUSTOMERS表中所有的字段的话,SQL查询应该这SQL>SQL>SELECT*FROM运行结果如下所+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 WHERE子句SQLWHERE子句用于有条件地从单个表中取回数据或者将多个表进行合如果条件满足,则查询只返回表中满足条件的值。你可以WHERE询结果,只获取必要SELECTSELECTcolumn1,column2,columnNFROMtable_nameWHERE在指定条件时,可以使用关系运算符和逻辑运算符,例、、、LIKE、NOT等考虑CUSTOMERS表,表中含有如下所示+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 CUSTOMERS表中选Salary2000并ID、Name、Salary段。SQL>SQL>SELECTID,NAME,SALARYFROMCUSTOMERSWHERESALARY>运行结果如下所++++|SALARY++|ID|+++|5||6||7| |8500.00|4500.00|10000.00++下面的示例将从CUSTOMERS表中选取名字为Hardik的客户的记录,并返回其D、Name和SaarySQL>SQL>SELECTID,NAME,SALARYFROMCUSTOMERSWHERENAME=结果如下所示+++++|SALARY+|8500.00++|ID|++|5|+++ANDOR算SQLANDOR算符可以将多个条件结合在一起,从SQL这两个运算符被称作连ANDAND运算SQLWHERE句中可以同时存在多个条件WHERE句中使用AND运算符的基本语法如SELECTSELECTcolumn1,column2,columnNFROMtable_nameWHERE[condition1]AND[condition2]...ANDD符连接的所有条件都TRUE。考虑如下CUSTOMERS+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的示CUSTOMERS选取所有Salary2000Age25记录,并返回ID、NameSalary段。SQL>SQL>SELECTID,NAME,SALARYFROMCUSTOMERSWHERESALARY>2000ANDage<结果如下所示+++++|ID|NAME|SALARY |6|Komal|4500.00|7|Muffy|10000.00 OR运算OR运算符用于SQL语句WHERE子句的多个条件结合起WHERE子句中使OR运算符的基本语SELECTSELECTcolumn1,column2,columnNFROMtable_nameWHERE[condition1]OR[condition2]...OR运算符连接的所有条件中只需要有一个TRUE即可。考虑如下CUSTOMERS+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|3|kaushik|23| |2000.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|6|Komal|22| |4500.00||7|Muffy|24|Indore|10000.00 ++下面的示CUSTOMERS选取所有Salary2000Age25记录,并返回ID、NameSalary段。SQL>SQL>SELECTID,NAME,SALARYFROMCUSTOMERSWHERESALARY>2000ORage<结果如下所示++++|SALARY++|ID|+++|3|kaushik|2000.00|5||6||7| |8500.00|4500.00|10000.00++UPDATESQLUPDATE语句用于修改表中现有你可以在UPDATE语句中使用WHERE子句来修改选定的记录,否则所有记录都会收到WHERE子句UPDATE语句的基本语UPDATEUPDATESETcolumn1=value1,column2= ,columnN=WHERECUSTOMERS表,表中记录如下所+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下例将会更新ID6的客户的ADDRESSSQL>UPDATESQL>UPDATECUSTOMERSSETADDRESS='Pune'WHEREID=6;更新之后,表中的记录如下所示||||||2|Khilan|25| |1500.00|3|kaushik|23| |2000.00||5|Hardik|27| |8500.00|4500.00|7|Muffy|24| |10000.00SQL>SQL>UPDATESETADDRESS='Pune',SALARY=上述语句执行后,CUSTOMERS表中的记录如22 25DELETEDELETESQLDELETE语句用于删除表中现有的记你可以在DELETE语句中使用WHERE子句来删除选定的记录,否则所有的记录都会被WHERE句的DELETE句的基本语法DELETEDELETEFROMtable_nameWHERE[condition];WHERE以将N条件ANDOR起CUSTOMERS表,表中记录如下所+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的示例代码将从中删除ID6SQL>SQL>DELETEFROMCUSTOMERSWHEREID=6;上述代码运行之后,CUSTOMERS表中的记录如下所示+++++|ID| |AGE| +|SALARY+++||1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|3|kaushik|23| |2000.00|4|Chaitali|25|Mumbai|6500.00|5|Hardik|27||7|Muffy|24| |8500.00|10000.00+++SQL>SQL>DELETEFROM现在,CUSTOMERS表中就空空如也了LIKELIKESQLLIKE子句通过通配符来将一个值同其他相似的值作比较。可以同LIKE运算符一起使用的?百分号?下划线SELECTFROMtable_nameSELECTFROMtable_nameSELECTFROMtable_nameWHEREcolumnLIKE'%XXXX%'SELECTFROMtable_nameWHEREcolumnLIKE'XXXX_'SELECTFROMtable_nameWHEREcolumnLIKE'_XXXX'SELECTFROMtable_nameWHEREcolumnLIKE'_XXXX_'你可以将多个条件ANDOR连接在一起。这里,XXXX为任何数字值或者字符下面这些示例中WHERE都有LIKE_语描WHERESALARYLIKEWHERESALARYLIKE找出所有含有200的WHERESALARYLIKE找出所有第二位和第三位为0WHERESALARYLIKE找出所有以2始,并且长度至少为3WHERESALARYLIKE找出所有以2WHERESALARYLIKE找出所有第二位为2,并且以3WHERESALARYLIKE 让我们来看一个真实的例子,考虑含有如下所示记录的CUSTOMERS表+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 SQL>SELECT*FROMSQL>SELECT*FROMCUSTOMERSWHERESALARYLIKE'200%';结果如下所示+++++++|SALARY++|ID||AGE|++++|1|Ramesh|32|Ahmedabad|2000.00|3|kaushik|23| |2000.00+++TOP、IROWNUMSELECTTOPnumber|percentcolumn_name(s)SELECTTOPnumber|percentcolumn_name(s)FROMtable_nameWHERE+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的例CUSTOMERS表中取回前记录SQL>SQL>SELECTTOP3*FROM结果如下所示+++++|ID|NAME|AGE| +|SALARY+++||1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23| |1500.00|2000.00+++如果你在使用MySQL数据库服务器,那么SQL>SQL>SELECT*FROMCUSTOMERSLIMIT3;结果如下所示++++++++|SALARY++|ID||AGE|+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|2000.00+++如果你在使用Oracle数据库服务器,那么等价的例子如下所SQL>SQL>SELECT*FROMCUSTOMERSWHEREROWNUM<=3;结果如下所示++++++++|SALARY++|ID||AGE|+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25| |1500.00|2000.00+++ORDERBY子SQLORDERBY句根据一列或者多列的值,按照升序或者降序排列数据。某些数据库默认以升序排列查询结ORDERBY子句的基本语法如下所FROMtable_name[WHEREcondition][ORDERBYcolumn1,column2,..columnN][ASC|+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的例子将查询结果按NAMESALARY升序SQL>SQL>SELECT*FROMCUSTOMERSORDERBYNAME,SALARY;结果如下所示||||||4|Chaitali|25|Mumbai|6500.00|5|Hardik|27|Bhopal|8500.00|3|kaushik|23| ||2|Khilan|25| |1500.00|4500.00|7|Muffy|24| |10000.00下面的例子将查NAMESQL>SQL>SELECT*FROMCUSTOMERSORDERBYNAMEDESC;7 247 242 25354GROUPBY子SELECT句中,GROUPBY句紧WHEREORDERBY子句之前。SELECTSELECTcolumn1,column2FROMtable_nameWHERE[conditions]GROUPBYcolumn1,column2ORDERBYcolumn1,+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 如果你想要知道每个客户的薪水如何,可以写一个带GROUPBYSQL>SQL>SELECTNAME,SUM(SALARY)FROMCUSTOMERSGROUPBYNAME;结果如下所示6500.006500.00|Hardik|8500.00|kaushik|1500.004500.0010000.00现在,让我们换一张CUSTOMERS表,表中记录NAME字段有重复值+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Ramesh|25| |1500.00|3|kaushik|23| |2000.00|4|kaushik|25|Mumbai|6500.00|5||6||7| |27|Bhopal|8500.00|22| |4500.00|24|Indore|10000.00 ++同样,如果你想要知道每个客户的薪水如何的话,可以GROUPBYSQL>SQL>SELECTNAME,SUM(SALARY)FROMCUSTOMERSGROUPBYNAME;结果如下所示++|++|SUM(SALARY)+++|Hardik|8500.00|kaushik 8500.00|Komal 4500.00|Muffy|10000.00|Ramesh 3500.00 SI关键字SQLDISTNCT关键字同SELECT语句一起使用,可以去除所有重复记录,只返回唯一使用DISTINCT关键字去除查询结果中的重复记录的基本语法如下所示SELECTSELECTDISTINCTcolumn1,column2,.FROMtable_name考虑含有如下记录的CUSTOMERS+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 首先,让我们看SELECT是如ORDERBYSALARY;上述语句的运行结果如下所示,2000的薪水出现了两次,表明原表中存在(SALARY字段)重++|++|+||1500.00|2000.00|2000.00|4500.00|6500.00|8500.00|10000.00 现在,我们SELECT语句中使DISTINCT关键字,然后看有什么样的结SQL>SQL>SELECTDISTINCTSALARYFROMCUSTOMERSORDERBYSALARY;++|+|1500.00|2000.00|4500.00|6500.00|8500.00+|+|10000.00 对结果进行SQLORDERBY句根据一列或者多列的值,按照升序或者降序排列数据。某些数据库默认以升序排列查询结用于将结果按照升序或者降序排列的ORDERBY下所示FROMtable_name[WHEREcondition][ORDERBYcolumn1,column2,..columnN][ASC|+++++|ID| |AGE| +|SALARY+++|1|Ramesh|32|Ahmedabad|2000.00|2|Khilan|25||3|kaushik|23||4|Chaitali|25||5||6||7||27||22||1500.00|2000.00|6500.00|8500.00|4500.00|24|Indore|10000.00 下面的例子将查询结果按NAMESALARY升序SQL>SQL>SELECT*FROMCUSTOMERSO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论