文章目錄
- 一,擴展視圖
- --1,概述
- --2,測驗
- 二,SQL練習
- --1,測驗
- 三,SQL優化
- --1,SQL的執行順序
- --2,總結
- 四,JDBC
- --1,概述
- --2,使用步驟
- --3,入門案例
- --4,練習
- 五,作業
一,擴展視圖
–1,概述
可視化的表,視圖當做是一個特殊的表,是指,把sql執行的結果,直接快取到了視圖中,
下次還要發起相同的sql,直接查視圖,
使用: 1,創建視圖 2,使用視圖
–2,測驗
create view 視圖名 as SQL陳述句;
select * from 視圖名;
#視圖:就是一個特殊的表,快取上次的查詢結果
#好處是提高了SQL的復用率,壞處是占記憶體無法被優化
#1.創建視圖
CREATE VIEW emp_view AS
SELECT * FROM emp WHERE ename LIKE '%a%' #模糊查詢,名字里包含a的
#2.使用視圖
SELECT * FROM emp_view
二,SQL練習
–1,測驗
參考帖子里的內容:https://blog.csdn.net/u012932876/article/details/117359992
#統計每個崗位的老師有幾個人
SELECT COUNT(1),prof FROM teachers
GROUP BY prof #按照非聚合列分組
HAVING prof='副教授' #having分組后再過濾
#統計每個系最年長的老師
SELECT depart,MIN(tbirthday) FROM teachers
GROUP BY depart
#order by tbirthday #按照數字升序
#查詢大于平均年齡的老師
SELECT AVG(tbirthday) FROM teachers
#'19690708250000.0000000000'
SELECT * FROM teachers WHERE tbirthday<(
SELECT AVG(tbirthday) FROM teachers )
#查詢男老師能上的課程
#子查詢:in子查詢,因為第一次查到了多個結果
SELECT cname FROM courses WHERE tno IN(
SELECT tno FROM teachers WHERE tsex='男')
#連接查詢:小表驅動大表,高效
SELECT courses.cname FROM courses INNER JOIN teachers
ON teachers.tno=courses.tno #表關系
WHERE teachers.tsex='男' #業務條件
#笛卡爾積
SELECT courses.cname FROM teachers,courses
WHERE teachers.tno=courses.tno #表關系
AND teachers.tsex='男' #業務條件
#了解insert into
#給指定列插入指定值,多個列名用逗號隔開,多個值也是逗號隔開
INSERT INTO dept(dname) VALUES('java開發部')
三,SQL優化
–1,SQL的執行順序

–2,總結
參考帖子里的內容:https://blog.csdn.net/u012932876/article/details/117359992
1,用欄位名代替*
2,where里能用and就不用or
3,設定欄位型別時,能用varchar就不用char
4,欄位值盡量用數字代替字串
5,給常用來作為查詢條件的欄位,設計索引,但是,單表的索引控制再5個以內
6,觀察SQL的性能,使用explain關鍵字,本質上就是看有沒有用到索引
7,模糊查詢,where name like ‘張%’ ,是高效的寫法,甚至可以讓索引生效
8,where name=123,會導致索引失效,
where name=‘123’,會讓name欄位的索引生效
,,,,
四,JDBC
–1,概述
全稱是java database connectivity,專門用來通過Java程式 操作 資料庫,
JDBC還是一套標準,支持對各種資料庫產品的操作,
MySQL資料庫使用JDBC:提供了一個jar包(很多的工具類),
–2,使用步驟
1,創建工程,匯入MySQL提供的jar包并編譯:把jar包復制到工程里,編譯jar包(選中jar包右鍵add as library…)
2,通過Java連接資料庫,需要指定一些連接資料庫的引數:用戶名,密碼,埠號,ip地址,指定庫名,
3,發起SQL陳述句并執行
4,處理結果集
–3,入門案例
package cn.tedu.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
//測驗 jdbc
//1,匯入jar包 2,連接資料庫
public class Test1 {
public static void main(String[] args) throws Exception {
//1,注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2,獲取資料庫的連接
//資料傳輸協議 資料庫的ip 埠號 資料庫名
String url = "jdbc:mysql://localhost:3306/cgb2107";
Connection c = DriverManager.getConnection(url,"root","root");
//3,獲取傳輸器
Statement s = c.createStatement();
//4,利用傳輸器執行SQL,回傳結果
ResultSet r = s.executeQuery("select * from dept");//執行查詢陳述句
//5,處理結果
while( r.next() ){//next()判斷有資料嗎,有就回傳true
//決議資料,用getXxx()獲取每個欄位的值--引數可以是欄位名或者欄位索引
int a = r.getInt(1);//獲取第1列的值
System.out.println(a);
String b = r.getString("dname");//獲取dname欄位的值
System.out.println(b);
String loc = r.getString(3);//獲取第3列的值
System.out.println(loc);
}
//6,釋放資源
r.close();//結果集
s.close();//傳輸器
c.close();//連接
}
}
–4,練習
package cn.tedu.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
//練習jdbc
public class Test2 {
public static void main(String[] args) throws Exception {
// method();
method2();
}
//利用jdbc,完成新增的功能
private static void method2() throws Exception{
//1,注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2,獲取資料庫的連接
//資料傳輸協議 資料庫的ip 埠號 資料庫名
String url = "jdbc:mysql://localhost:3306/cgb2107";
Connection c = DriverManager.getConnection(url,"root","root");
//3,獲取傳輸器
Statement s = c.createStatement();
//4,利用傳輸器執行 增刪改的SQL
//executeUpdate()用來執行增刪改的SQL,只回傳影響行數
int rows = s.executeUpdate(
"INSERT INTO emp(ename,job) VALUES('rose','副總')");
//5,釋放資源
//r.close();//結果集
s.close();//傳輸器
c.close();//連接
}
//利用jdbc,查詢emp表的所有資料
private static void method() throws Exception {
//1,注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2,獲取資料庫的連接
//資料傳輸協議 資料庫的ip 埠號 資料庫名
String url = "jdbc:mysql://localhost:3306/cgb2107";
Connection c = DriverManager.getConnection(url,"root","root");
//3,獲取傳輸器
Statement s = c.createStatement();
//4,利用傳輸器執行SQL,回傳結果
ResultSet r = s.executeQuery("select * from emp");
//5,處理結果
while(r.next()){//如果有資料,next()回傳true
for(int i=1;i<9;i++){//自己數表里一共有幾列,就回圈幾次
Object a = r.getObject(i);//引數是欄位的索引1 2 3...
System.out.println(a);//列印每列得到的值
}
}
//6,釋放資源
r.close();//結果集
s.close();//傳輸器
c.close();//連接
}
}
五,作業
需求: 模擬用戶登錄現象
1,需要你自己創建user表,并提供一些欄位(id name password)
2,向表中添加記錄,如1 jack 123456
3,撰寫JDBC程式,完成登錄
4,本質上就是向發起了select陳述句:
select * from user where name=‘jack’ and password=‘123456’
5,當用戶輸入正確的用戶名和密碼時,提示登錄成功,否則提示登錄失敗
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/296567.html
標籤:java
上一篇:【 JavaSE 】 資料型別
下一篇:cgb2107-day04
