SQL语句什么是SQLSQL(StructuredQueryLanguage)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQLServer等。SQ标准(ANSI/ISO)有:SQL-92:1992年发布的SQL语言标准;SQL:1999:1999年发布的SQL语言标签;SQL:2003:2003年发布的SQL语言标签;这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQLServer都有自己的方言。语法要求SQL语句可以单行或多行书写,以分号结尾;可以用空格和缩进来来增强语句的可读性;关键字不区别大小写,建议使用大写;表结构操作DDL(数据定义语言)用于创建和删除数据库对象等操作CREATE、DROP、ALTER等建立数据库CREATEDATABASE数据库名删除数据库DROPDATABASE数据库名称建表CREATETABLE表名称(列名称1数据类型(长度),列名称2数据类型(长度),列名称3数据类型(长度))不为空建表时CREATETABLE表名称(列名称1数据类型notnull,列名称2数据类型,列名称3数据类型)表格已经存在ALTERTABLE表名MODIFY列名数据类型NOTNULL;删除ALTERTABLE表名MODIFY列名数据类型;唯一建表时CREATETABLE表名称(列名称1数据类型,列名称2数据类型,CONSTRAINT索引名UNIQUE(列名))表格已经存在ALTERTABLE表名ADDCONSTRAINT索引名UNIQUE(列名)删除ALTERTABLE表名DROPINDEX索引名默认建表时CREATETABLE表名称(列名称1数据类型default默认值,列名称2数据类型,列名称3数据类型)表格以及存在ALTERTABLE表名ALTER列名SETDEFAULT默认值删除ALTERTABLE表名ALTER列名DROPDEFAULT主键建表时CREATETABLE表名称(列名称1数据类型AUTO_INCREMENT,列名称2数据类型,PRIMARYKEY(列名称1))表格已存在时ALTERTABLE表名ADDPRIMARYKEY(列名称)删除主键ALTERTABLE表名DROPPRIMARYKEY添加自增ALTERTABLE表名MODIFYCOLUMN字段名字段类型NOTNULLAUTO_INCREMENT删除自增ALTERTABLE表名MODIFYCOLUMN字段名字段类型NOTNULL设置自增开始数值ALTERTABLE表名AUTO_INCREMENT=开始数值外键建表时CREATETABLE表名称(列名称1数据类型,列名称2数据类型,CONSTRAINT外键名FOREIGNKEY(列名)REFERENCES关联表名(关联表的字段名))表格已存在时ALTERTABLE表名ADDCONSTRAINT外键名FOREIGNKEY(列名)REFERENCES关联表名(关联表的字段名)删除外键ALTERTABLE表名DROPFOREIGNKEY外键名删除表DROPTABLE表名称删除表中数据TRUNCATETABLE表名称添加列ALTERTABLE表名ADDCOLUMN列名字数据类型(长度)删除列ALTERTABLE表名DROPCOLUMN列名表中数据的操作DML语句(数据操作语言)用来操作数据库中所包含的数据INSERT、DELETE、UPDATEDQL语句(数据查询语言)用来对数据库中的数据进行查询SELECT添加数据INSERTINTO表名(列1,列2…)VALUES(字段1,字段2…)删除数据DELETEFROM表名修改数据UPDATE表名SET列名1=xx,列名2=xx查询数据SELECT列名1,列名2FROM表名WHEREWHERE列运算符值LIKE_%转义字符LIKE‘a/%’ESCAPE‘/’BETWEENAND操作符BETWEEN...AND会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。SELECT*FROM表名WHERE列名BETWEENvalue1ANDvalue2NULLISNULL判断是否为空ISNOTNULL判断是否不为空AND和OR运算符ANDOR结合练习课堂练习DISTINCT在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词DISTINCT用于返回唯一不同的值。SELECTDISTINCT列名称FROM表名称ORDERBY排序ASCDESC多个聚合函数SELECT函数名(列名)FROM表名获取数量COUNT最大值MAX最小值MIN平均值AVG求和值SUMGROUPBY根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。SELECT字段,COUNT(*)AS记录数FROMAGROUPBY字段HAVING语句练习--1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间的学生的学号、课程号和成绩。--3.查询学生都选修了哪些课程,要求列出课程号。--4.查询C01号课程成绩最高的分数--5.查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。--6.统计每个系的学生人数。--7.统计每门课程的修课人数和考试最高分。--8.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。--9.统计选修课的学生总数和考试的平均成绩。--10.查询选课门数超过2门的学生的平均成绩和选课门数。--11.列出总成绩超过200分的学生,要求列出学号、总成绩。AS别名SELECT列名AS列别名FROM表名AS表别名JOINLEFTJOIN(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录RIGHTJOIN(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录INNERJOIN(等值连接)只返回两个表中联结字段相等的行JOIN举例举例如下:--------------------------------------------表A记录如下:aIDaNum1a200501112a200501123a200501134a200501145a20050115表B记录如下:bIDbName1200603240122006032402320060324034200603240482006032408--------------------------------------------LEFTJOINLEFTJOINsql语句如下:SELECT*FROMALEFTJOINBonA.aID=B.bID结果如下:aIDaNumbIDbName1a20050111120060324012a20050112220060324023a20050113320060324034a20050114420060324045a20050115NULLNULLRIGHTJOINRIGHTJOINsql语句如下:SELECT*FROMARIGHTJOINBonA.aID=B.bID结果如下:aIDaNumbIDbName1a20050111120060324012a20050112220060324023a20050113320060324034a2005011442006032404NULLNULL82006032408INNERJOININNERJOINsql语句如下:SELECT*FROMAINNERJOINBonA.aID=B.bID结果如下:aIDaNumbIDbName1a20050111120060324012a20050112220060324023a20050113320060324034a2005011442006032404练习--12.查询选修了c02号课程的学生的姓名和所在系。--13.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。--14.查询计算机系男生修了数据库基础的学生的姓名、性别、成绩。UNIONUNION操作符用于合并两个或多个SELECT语句的结果集。SELECT符合的列FROM表名1UNIONSELECT符合的列FROM表名2UNIONALL练习--15.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,--并要求将这两个查询结果合并成一个结果集,--并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。ININ操作符允许我们在WHERE子句中规定多个值。SELECT*FROM表名WHERE列名IN(value1,value2,...)NOTININ中可以放入查询语句ANYALLANY集合中至少有一个满足条件ALL集合中所有元素满足条件SELECT*FROM表名WHERE列名运算符ALL或者ANY(查询语句)练习--16.用子查询实现如下查询:--(1)查询选修了C01号课程的学生的姓名和所在系。--(2)查询数学系成绩80分以上的学生的学号、姓名。--(3)查询计算机系学生所选的课程名。--(4)查询哪些课程没有人选,要求列出课程号和课程名复制表表格已经存在:INSERTINTO表名2(列名1,列名2,...)SELECT列名1,列名2,...FROM表名1表格需要创建:CREATETABLE表名2(SELECT*FROM表名1);练习--17.将计算机系成绩高于80分的学生的修课情况插入到另一张表中,分两种情况实现:--(1)在插入数据过程中建表。--(2)先建一个新表,然后再插入数据。LIMIT选取指定数量和范围的数据SELECT*FROM表名LIMIT数量SELECT*FROM表名LIMIT起始位置,数量练习--18.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。--19.删除修课成绩小于50分的学生的修课记录--20.将所有选修了c01课程的学生的成绩加10分。