由于主攻java,对mysql的掌握主要在应用层。java后台中最基本的四条mysql语句,即增删改查。
1.查找元素
select * from authors
select * from authors where au_lname="white"
SELECT * FROM AUTHORS WHERE au_id IN(SELECT au_id FROM titleauthor WHERE title_id='BU1032')2.删除元素
DELETE FROM users WHERE userName="xxx"3.增添元素
单条更新
INSERT INTO users (userName,userPwd,Ename,Email,Logo) VALUES (?,?,?,?,?)多条更新
insert into users(userPwd,userPwd) select userName,userPwd from xinbiao group by userName将users的user表的内容更新到新表中。?表示字符串在java中调用数据库常用
4.修改元素
UPDATE users SET userPwd=?,Ename=?,Email=?,Logo=? WHERE userName=?set后加修改内容,where后加条件
5.查找排序
SELECT content.*,users.Email,users.Logo FROM content,users WHERE content.UserName=users.userName AND (contId=? OR UpperId=?) ORDER BY UpperId,ContId DESCorder by 升序排列,order by desc 降序排列
6.别名
SELECT MAX(price) FROM titles
SELECT MAX(price) AS 'max' FROM titles
SELECT MAX(price) 'max' FROM titles7.最大,最小,平均,求和,计数
SELECT MAX(price) 'max',MIN(price),AVG(price),SUM(price),COUNT(*) FROM titles注意下图,上面代码中,没起别名的话,差的是啥,它在数据库中临时名字就是啥!用java拿变量名获取的时候要注意!

8.分类聚合
SELECT TYPE,MAX(price) FROM titles GROUP BY TYPE
SELECT TYPE,MAX(price) FROM titles GROUP BY TYPE HAVING MAX(price)>20
SELECT TYPE,MAX(price) FROM titles GROUP BY TYPE HAVING MAX(price) IS NOT NULL注意:只有null情况下用 is not null 。(其他情况直接用!=)
9.表关联查询
SELECT ti.title,au.au_lname FROM AUTHORS au,titleauthor t,titles ti WHERE au.au_id=t.au_id AND t.title_id=ti.title_id AND au_lname='white'10.内连接查询
SELECT * FROM AUTHORS au INNER JOIN titleauthor ti ON au.au_id=ti.au_id
INNER JOIN titles t ON ti.title_id=t.title_id
WHERE au.state IN ('ca')内嵌式,表关联,内连接都能达到同样的效果,但是我们通常采用内连接。
原因分析:
1.内嵌式要写很多语句,每写一条就多一条开销
2.表关联,假设有三张表,每张表10条记录,关联三张就是1000条然后从1000条记录中索引,效率低,速度慢。
3.内连接,假设三张表,每张10条记录,先关联俩张,舍去不相关的数据,然后剩下的数据在和第三条数据关联,相比上一条节省了不少计算。
(PS:当什么情况下表连接和内连接查询效率是一样的呢?)
答案:有俩张表的时候(当数据库只有一条数据的时候也可以(^__^) )
11.外链接
外链接分为左链接,右链接,全链接(mysql没有,其他数据库有)
左链接如下:(右链接只需把left改为right即可)
SELECT * FROM AUTHORS au LEFT JOIN titleauthor ti
ON au.au_id=ti.au_id左链接就是以左边为主,右边有的显示,没有的显示null,右链接刚好相反。
表关联嵌套查询,大小写均可运行不影响(mysql没有大小写之分)
附上一张数据库的表关联图

查询数据库作者们出版了哪些书?显示图书信息
SELECT au_id FROM AUTHORS
SELECT title_id FROM titleauthor WHERE au_id IN (SELECT au_id FROM AUTHORS)
SELECT title FROM titles WHERE title_id IN (SELECT title_id FROM titleauthor WHERE au_id IN (SELECT au_id FROM AUTHORS))查询图书id是BU1302的作者信息
SELECT au_id FROM titleauthor WHERE title_id='BU1032'
SELECT * FROM AUTHORS WHERE au_id IN(SELECT au_id FROM titleauthor WHERE title_id='BU1032')查询state=’ca’地区的作者,出版的图书,显示图书信息
SELECT au_id FROM AUTHORS WHERE state='ca'
SELECT title_id FROM titleauthor WHERE au_id IN(SELECT au_id FROM AUTHORS WHERE state='ca')
SELECT * FROM titles WHERE title_id IN (SELECT title_id FROM titleauthor WHERE au_id IN(SELECT au_id FROM AUTHORS WHERE state='ca'))查询单价大于10的图书馆是哪些作者编的,显示作者信息
SELECT title_id FROM titles WHERE price>10
SELECT au_id FROM titleauthor WHERE title_id IN (SELECT title_id FROM titles WHERE price>10)
SELECT * FROM AUTHORS WHERE au_id IN (SELECT au_id FROM titleauthor WHERE title_id IN (SELECT title_id FROM titles WHERE price>10))not in不包含,查询没有出过书的作者
SELECT * FROM AUTHORS WHERE au_id NOT IN (
SELECT au_id FROM titleauthor WHERE title_id IN(SELECT title_id FROM titles))查询了出版了俩本以上的作者信息(含),显示作者信息
SELECT * FROM AUTHORS WHERE au_id IN (
SELECT au_id FROM titleauthor ti GROUP BY au_id HAVING COUNT(1)>=2)
SELECT * FROM AUTHORS au INNER JOIN titleauthor ti ON au.au_id=ti.au_id GROUP BY au_id HAVING COUNT(1)>=2查询哪些图书是俩个以上作者合著的,显示书名和作何名
SELECT * FROM titleauthor ti INNER JOIN AUTHORS au ON ti.au_id = au.au_id
INNER JOIN titles t ON t.title_id=ti.title_id
GROUP BY ti.title_id HAVING COUNT(1)>=2附上一张万能查询数据库连接方法:
public List<Map> selectEverything(String sql){
Conn c = new Conn();
Connection conn = c.getCon();
List<Map> list = new ArrayList<Map>();
try {
PreparedStatement pst=conn.prepareStatement(sql);
ResultSetMetaData rm =pst.getMetaData();
int m = rm.getColumnCount();
ResultSet rs = pst.executeQuery();
while(rs.next()){
Map map = new HashMap();
for(int i=1;i<=m;i++){
String col = rm.getColumnName(i);
map.put(col, rs.getString(i));
}
list.add(map);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
















