Day38
*连接查询:必须是两个或以上表之间且一定有主外键关系,才能进行连接查询
I. 内连接:inner join on
SELECT bid,bname,bprice,book.`tid`,tname FROM book INNER JOIN booktype ON book.`tid`=booktype.`tid`;
II. 外连接:主表的内容一定会显示,从表的内容只有主表有的才会显示
1)左外连接:左边的是主表,右边是从表
SELECT bid,bname,bprice,book.`tid`,tname FROM book LEFT JOIN booktype ON book.`tid`=booktype.`tid`
2)右外连接:右边是主表,左边是从表
SELECT bid,bname,bprice,book.`tid`,tname FROM book RIGHT JOIN booktype ON book.`tid`=booktype.`tid`
*子查询:在查询语句还还有查询语句
-- 查询工资大于jones的人,子查询是得到Jones的工资
SELECT empno,ename,sal FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='jones')
*补充:
if(条件,真则返回,假则返回),一般用在需要返回两种结果的时候(也可以用if嵌套,但是最好不用)
SELECT sid,sname,age,IF(sex=0,'女','男') AS '性别' FROM stu
case 字段 when 值 [else 值] then 值 ,当字段的值等会when后的值时,则返回then后的值(跟java中的switch case有点像)
SELECT sid,sname,age,
CASE sex
WHEN 1 THEN '男'
WHEN 0 THEN '女'
WHEN 2 THEN '保密'
ELSE '未知'
END '性别'
FROM stu
isnull()如果是null 就返回1,如果不是就返回0
SELECT sid,sname,age,ISNULL(sex) '性别' FROM stu
*JDBC:6个步骤
I. 第一步:导包,并且配置好构建路径
II. 第二步:加载驱动
Class.forName("com.mysql.jdbc.Driver");
III. 第三步:获取连接
String url = "jdbc:mysql://127.0.0.1:3306/nz2001";//·数据库ip,端口,名字
String name = "root";//·数据库用户名
String pass = "123";//·数据库密码
//·通过DriverManager.getConnection方法获取一个和数据库的连接
Connection con = DriverManager.getConnection(url, name, pass);
IV. 第四步:通过连接,获取一个statement对象(操作数据库用的)
Statement stm = con.createStatement();
V. 第五步:执行sql语句
String sql1 = "insert into book values(4,'灵域',33,2)";
String sql2 = "UPDATE book SET bprice=55 WHERE bid=1";
String sql3 = "DELETE FROM book WHERE bid=3";
int result = stm.executeUpdate(sql1);//·执行sql语句,并返回一个数据库受影响的行数
int result1 = stm.executeUpdate(sql2);//·只能执行DML语句
int result3 = stm.executeUpdate(sql3);
System.out.println(result+result1+result3);
VI. 第六步:关闭连接
stm.close();//·注意关闭顺序,先关小的,再关大的
con.close();
intln(result+result1+result3);
VI. 第六步:关闭连接
~~~java
stm.close();//·注意关闭顺序,先关小的,再关大的
con.close();