查询记录
查询表达式
每个表达式表示想要的一列,必须至少一个。
多个类之间以英文逗号分隔。
“*”号表示所有列
例如
只查询id和name两列
SELECT id,name FROM student;
WHERE
条件表达式
对记录进行过滤,如果没有指定WHERE自居,则显示所有记录。
在WHERE表达式中,可以使用MySQL支持的杉树或运算符。
例如:
查询id为偶数的记录
SELECT * FROM student WHERE id%2=0;
GROUP BY
查询结果分组
例如
按照分数分组,并且降序排列
SELECT * FROM student GROUP BY score DESC;
HAVING
分组条件
例如:
按照分数分组,并且只显示大于60分的
SELECT * FROM student GROUP BY score HAVINGscore > 60;
ORDER BY
对查询结果进行排序
例如:
按照id降序排列
SELECT * FROM student ORDER BY id DESC;
LIMIT
限制查询结果返回的数量
例如:
返回查询结果中的第二条记录
SELECT* FROM student LIMIT2;
返回2条记录,从第一条记录开始(记录从0开始编号);
SELECT * FROM student LIMIT 1,2;
输出分数最高的3名学生记录
SELECT * FROM student WHERE name LIKE ‘L%’;
子查询
概念
子查询(Subquery)是指出现在其他SQL语句内的Select子句。
例如:
SELECT * FROM T1 WHERE col1=(SELECT col2FROM t2);
其中SELECT * FROM t1,称为OuterQuery/Out
SELECT col2 FROM t2,称为SubQuery
注意
子查询指嵌套在查询内部,且必须始终出现在圆括号内。
子查询可以包含多个关键字或条件,如果GROUP BY,ORDER BY,LIMIT,函数等。
子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET 或DO.
子查询返回值
子查询可以返回标量,一行,一列,或子查询。
使用比较运算符的子查询
=,>,=,<=,!=
例如:查询高于班级平均分的学生
方法一先求平均值,然后查询
SELECT AVG(score) FROM student;
SELECT * FROM student WHEREscore>=(SELECT AVG(score) FROM student);
多表连接查询
使用on关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤。
INNER JOIN 内连接
多个表的交集
LEFT(OUTER)JOIN 左外连接
左表和多个表的交集
RIGHT(OUTER)JOIN 右外连接
右表和多个表的交集
例:
SELECT * FROM user RIGHT JOIN province ONprovince id=user.pid;
常用函数
字符函数
[NOT]LIKE
模式匹配
例:
SELECT * FROM student WHERE name LIKE ’L%’;
查找名字以L开头的学生信息
%表示匹配任意个字符_表示匹配任意一个字符
比较函数
IS [NOT]NULL
是否为空
例:
SELECT * FROM student WHERE name IS NULL;
查找名字为null的学生信息
聚合函数
AVG()平均值
MAX()最大值
MIN()最小值
SUM()求和
COUNT()求数量
JDBC
概念
JDBC(Java Data Base Connectivity,java 数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它是由一组用Java语言编写的类和接口组成。
使用JDBC连接数据库步骤
1加载JDBC驱动程序,不同的数据库加载的驱动不一样
Class.forName("com.mysql.jdbc.Driver");
2建立连接。通过DriverManager类的getConnection方法建立连接时,需要注意getConnection会抛出SQLException异常,需要在try/catch块中捕获。
String url = "jdbc:mysql://localhost/bookshop";
String user = "root";
String password = "123456";
Connection con = DriverManager.getConnection(url, user, password);
3.创建Statement对象 用来向数据库发送查询和命令 大部分数据库驱动程序允许在同一个连接中打开多个并行的Statement对象,创建好Statement对象之后,就可以使用它来进行数据库的操作了。
Statement state = con.createStatement();
4.结果集处理。
//查询数据
ResultSet set = state.executeQuery("SELECT * FROM user");
while(set.next()){
String name = set.getString("name");
System.out.println(name);
}
//更新记录
state.executeUpdate("UPDATE user SET pass = '000' WHERE id = 1");
//插入记录
state.executeUpdate("INSERT user (name, pass)VALUES('Herry', '124')");
//删除记录
state.executeUpdate("DELETE FROM user WHERE id = 1");
5.关闭连接。关闭连接的同时,还要关闭对应的Statement和ResultSet对象。
set.close();
state.close();
con.close();