260 likes | 468 Views
第 17 讲 SQL 语句简介. 17.1 SQL 简介 17.2 数据表操作 17.3 添加、删除与修改记录 17.4 查询记录 17.5 在 Java 中用 SQL 语句操作实用举例. 本章要 点. 了解什么是 SQL 语句 了解 SQL 语句关于表的操作 掌握 SQL 语句对于数据表中记录的操作 掌握 SQL 语句的查询命令. 17.1 SQL 简介. 结构化查询语言 (SQL) 是访问数据库的标准语言。通过 SQL 可以完成复杂的数据库操作,而不用考虑如何操作物理数据库的底层细节。
E N D
第17讲 SQL语句简介 • 17.1 SQL 简介 • 17.2 数据表操作 • 17.3 添加、删除与修改记录 • 17.4 查询记录 • 17.5 在Java中用SQL语句操作实用举例
本章要点 • 了解什么是SQL语句 • 了解SQL语句关于表的操作 • 掌握SQL语句对于数据表中记录的操作 • 掌握SQL语句的查询命令
17.1 SQL 简介 • 结构化查询语言(SQL)是访问数据库的标准语言。通过SQL可以完成复杂的数据库操作,而不用考虑如何操作物理数据库的底层细节。 • ANSI SQL语句按其基本功能可分为两种类型: • 第一种:数据定义语言(DDL) • 数据定义语言提供一系列的命令用以创建数据库对象,如创建、删除表、建立字段及其属性、为表增加索引、创建表与表之间的连接关系等。 • 第二种:数据库操作语言(DML) • SQL数据操作语言用于在表中检索记录、更新记录以及添加或删除记录。
17.2 数据表操作之一 • 5.2.1 SQL提供的常用数据类型 • SQL语言中提供了大量的数据类型,下面是一些常用的数据类型: • 1.数值型 • INTEGER 长整数(也可写成INT) SMALLINT 短整数 • REAL 取决于机器精度的浮点数 • DOUBLE PRECISION 取决于机器精度的双精度浮点数 • FLOAT(n) 浮点数,精度至少为n位数字 • NUMERIC(p,d) 定点数,由p位数字(不包括符号、小数点)组成, • 小数点后面有d位数字(也可写成DECIMAL(p,d)或DEC(p,d)) • 2.字符串型 • CHAR(n) 长度为n的定长字符串 • VARCHAR(n) 具有最大长度为n的变长字符串 • 3.时间型 • DATE 日期,包含年、月、日,形为YYYY-MM-DD • TIME 时间,包含一日的时、分、秒,形为HH:MM:SS • 4.逻辑型 • LOGICAL 只有真(T)或假(F)的数据项 • SQL允许对以上数据类型的数据进行比较操作,但算术操作只限于数值型。
17.2 数据表操作之二 • 5.2.2 基本表操作 • 1.创建表 • 基本表的创建可用Create语句来实现: • CREATE TABLE 表名(字段名1 类型,字段名2 类型……) • 例如:创建班级表的具体代码如下: • CREATE TABLE 班级表(班级名称 char(30),人数 integer,班主任 char(10),教室 char(20)) • 2.删除表 • 删除表可使用Drop语句: • DROP TABLE 表名
17.2 数据表操作之三 • 3.修改表 • 修改表一般是指对字段的添加、删除、修改操作,使用Alter语句。 • 添加: • ALTER TABLE 表名 ADD COLUMN 字段名1 类型(长度),字段名2 类型(长度)…… • 删除: • ALTER TABLE 表名 DROPD COLUMN 字段名 • 修改: • ALTER TABLE 表名 ALTER (字段名1 类型,字段名2 类型……)
17.2 数据表操作之四 • 例5-1 • 在班级表中添加专业字段。 • alter table 班级表 add column 专业 char(20) • 例5-2 • 将班级表中专业字段的长度改为50。 • alter table 班级表 alter 专业 char(50) • 例5-3 • 删除专业字段。 • alter table 班级表 drop 专业
17.3 添加、删除与修改记录 • 17.3.1 添加记录 • SQL语言用INSERT语句向表中输入数据。其语法如下: • INSERT INTO 表名字(字段1,字段2,字段3,……) VALUES(数据1,数据2,数据3,……) • 若在输入记录时,每个字段均有内容,可省略表名后的字段名。 • 例17-4 • 在学生表中输入一条记录 “010602006”,“田秀丽”,“8907653”,“450”,“济南市天桥区”,“82-03-23”,“女”,“01电子商务二班” • insert into 学生表 values('010602006','田秀丽', '8907653',450,'济南市天桥区','82-03-23','女','01电子商务二班')
添加记录注意 • 括号内是输入的数据,各数据项用逗号分隔。 • 字符串和日期值必须用单引号括起来。 • 数值型数据不用括起。 • 数据顺序一定与字段顺序对应。 • 所有标点符号一律在半角状态下输入
添加记录注意 • 例17-5 • 在学生表中添加记录,“010602007”,“李刚”,“男”,其余字段为空。 • insert into 学生表(学号,姓名,性别) values('010602007','李刚','男') • 括号内是输入的数据,各数据项用逗号分隔。 • 字符串和日期值必须用单引号括起来。 • 数值型数据不用括起。 • 数据顺序一定与字段顺序对应。 • 所有标点符号一律在半角状态下输入
17.3.2 删除记录 • 删除记录可使用DELETE语句,其语法如下: • DELETE * FROM 表名 WHERE 条件 • 例17-6 • 删除学生表中李刚这条记录。 • cs.Execute "delete * from 学生表 where 姓名='李刚'" • 例17-7 • 删除学生表中所有的女生。 • cs.Execute "delete * from 学生表 where 性别='女'"
17.3.3 修改记录 • 修改记录可使用UPDATE语句,其语法如下: • UPDATE 表名称 SET 字段1=数据1,字段2=数据2 WHERE 条件 • 例5-8 • 将学生表中所有的家庭住址前加山东省。 • cs.Execute "update 学生表 set 家庭住址='山东省'+家庭住址" • 例5-9 • 将学生表中田秀丽的入学成绩改为530,出生日期改为“83-02-01”。 • cs.Execute "update 学生表 set 入学成绩=530,出生日期='83-02-01' where 姓名='田秀丽'"
17.4 查询记录 • SELECT查询的完整类型如下: • SELECT 字段1,字段2,字段3……(要显示的字段列表) • FORM 子句 • [WHERE 子句] • [GROUP BY 子句] • [HAVING 子句] • [ORDER BY 子句] • 其中括号内的子句可视需要选用
17.4.1 字段表的表示 • 在SELECT关键字之后指定字段名称作为查询对象,例如要查询学生表中的学号,则可写为: • SELECT 学号 FORM 学生表 • 若要将查询范围扩大到整个数据表,则可以使用通配符“*”取代字段名称。如: • SELECT * FROM 学生表 • 表示取出学生表中的所有记录。 • 若字段列表中要取出多个字段,各字段间用逗号隔开,如: • SELECT 学号,姓名,入学成绩 FROM 学生表
17.4.2 条件子句 WHERE • 在SELECT查询语句中,可以运用WHERE子句指定某些条件,将所有符合条件的记录获取出来。语法如下: • WHERE 条件表达式 • WHERE子句可以包含任何逻辑运算,只要返回值为True或False即可。 • 比较运算符 逻辑运算符
17.4.2 条件子句 WHERE • 通配符 特殊运算符
17.4.2 条件子句 WHERE举例之一 • 例17-10 • 查询学生表中所有的女同学 • select * from 学生表 • 例5-11 • 查询学生表中学号前4位为“0105”的学生的学号、姓名和性别。 • select 学号,姓名,性别 from 学生表 where left(学号,4)='0105' • 其中left(str,n)函数可从字符串str左边取,取出n个字符,mid(str,n1,n2)函数可从字符str的第n1位开始取,取出n2个字符。 • 2.逻辑运算符 • 表5-3 逻辑运算符 • 逻辑运算符说明AND或(或者)OR与(并且)NOT非(否) • 例5-12 • 查询学生表中01计算机一班入学成绩在350分以上的同学 • select * from 学生表 where 班级='01计算机一班' and 入学成绩 > 350 • 例 5-13 • 查询学生表中81年以后出生的女同学或不是01计算机一班的同学。 • select * from 学生表 where 班级<>'01计算机一班' or 性别='女' and 出生日期 >=#81-01-01# • 注意,日期型的数据,与Acess数据库连接时用# #括起来,与SQL Server连接时用单引号(‘’)号。 • 3.通配符 • SQL语法还支持LIKE运算符,这个运算符接受表5-4所示的通配符。 • 表5-5 通配符 • 通配符意 义%任何长度的字符串(包括0)_(下划线)任何一个字符[](中括号)某个范围内的一个字符例5-14 • 列出所有姓李的同学的姓名和家庭住址。 • select 姓名,家庭住址 from 学生表 where 姓名 like '李%' • 注意,字符串的前后要加上单引号。 • 例5-15 • 列出电话号码开头在5-8之间的所有记录。 • select * from 学生表 where 联系电话 like '[5,8]%' • 4.特殊运算符 • SQL语句允许在WHERE子句中使用特殊的运算符。表5-6列出这些特殊的运算符号。 • 表5-6 特殊运算符号 • 运算符号含 义BETWEEN定义一个区间范围IS NULL测试属性是否为空值IN检查一个属性是否属于一组值之中EXISTS检查某一个属性是否有值。实际上,EXISTS是IS NULL的反义词例5-16 • 列出入学成绩在300到360之间的同学。 • select * from 学生表 where 入学成绩 between 300 and 360 • 例5-17 • 列出无联系电话的同学。 • select * from 学生表 where 联系电话 is null • 例5-18 • 列出李华明、孙日鹏、朱婷婷、刘娜的所有信息。 • select * from 学生表 where 姓名 in ('李华明','孙日鹏','朱婷婷', '刘娜')
17.4.2 条件子句 WHERE举例之一 • 例17-10 查询学生表中所有的女同学 • select * from 学生表 • 例17-11 查询学生表中学号前4位为“0105”的学生的学号、姓名和性别。 • select 学号,姓名,性别 from 学生表 where left(学号,4)='0105' • 其中left(str,n)函数可从字符串str左边取,取出n个字符,mid(str,n1,n2)函数可从字符str的第n1位开始取,取出n2个字符。 • 例17-12 查询学生表中01计算机一班入学成绩在350分以上的同学 • select * from 学生表 where 班级='01计算机一班' and 入学成绩 > 350 • 例 17-13 查询学生表中81年以后出生的女同学或不是01计算机一班的同学。 • select * from 学生表 where 班级<>'01计算机一班' or 性别='女' and 出生日期 >=#81-01-01# • 注意:日期型的数据,与Acess数据库连接时用# #括起来,与SQL Server连接时用单引号(‘’)号。
17.4.2 条件子句 WHERE举例之二 • 例5-14 列出所有姓李的同学的姓名和家庭住址。 • select 姓名,家庭住址 from 学生表 where 姓名 like '李%' • 注意,字符串的前后要加上单引号。 • 例5-15 列出电话号码开头在5-8之间的所有记录。 • select * from 学生表 where 联系电话 like '[5,8]%' • 例5-16 列出入学成绩在300到360之间的同学。 • select * from 学生表 where 入学成绩 between 300 and 360 • 例5-17 列出无联系电话的同学。 • select * from 学生表 where 联系电话 is null • 例5-18 列出李华明、孙日鹏、朱婷婷、刘娜的所有信息。 • select * from 学生表 where 姓名 in ('李华明','孙日鹏','朱婷婷', '刘娜')
1.COUNT • 可用作计数器,计算满足某种条件的行数。 • 例5-19 • 统计总人数 • select count(*) from 学生表 • 显示结果如下 • Expr100011由于没有指定输出字段,故显示为Expr1000,若要指明输出字段,可将上句改写为 • select count(*) as 总人数 from 学生表
2.MAX和MIN • 显示入学成绩的最高分与最低分 • select max(入学成绩) as 最高分,min(入学成绩) as 最低分 from 学生表 • 显示结果为:
3.AVG和SUM • 可用来求出某字段的平均值及总和。 • 例5-21 • 统计入学成绩的总分和平均分 • select avg(入学成绩) as 平均分,sum(入学成绩) as 总分 from 学生表 • 显示结果为:
17.5 在Java中用SQL语句操作实用举例之一 • 录入数据: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • String url = "jdbc:odbc:stu01"; • Connection conn = DriverManager.getConnection(url); • Statement stat = conn.createStatement(); • String sql = "insert into students values('20040001','张三s','男','18','04软件','82059393','济南');"; • //String sql = "insert into students values('20040001','张三s','男','18','04软件','82059393','济南');"; • int rowCount =stat.executeUpdate(sql); • 上述代码为向数据表中添加一行数据
17.5 在Java中用SQL语句操作实用举例之二 • 删除数据: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • String url = "jdbc:odbc:stu01"; • Connection conn = DriverManager.getConnection(url); • Statement stat = conn.createStatement(); • String sql = "delete from students where xuehao=‘01012’"; • int rowCount =stat.executeUpdate(sql); • 本行代码为将数据表 中的学号为“01012”的记录删除
17.5 在Java中用SQL语句操作实用举例之三 • 查询数据: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • String url = "jdbc:odbc:stu01"; • Connection conn = DriverManager.getConnection(url); • Statement stat = conn.createStatement(); • String sql = “select * from students where xinbie=‘男'"; • ResultSet rSet = stat.executeQuery(sql); • 本行代码为查询数据表 中的所有的男同学