常用數(shù)據(jù)庫sql語句寫法整理
--創(chuàng)建一個(gè)用戶表
create table users (id int(10),pwd char(20),name varchar(10));
char表示占20個(gè)長度的空間 varchar根據(jù)實(shí)際長度決定空間大小
--復(fù)制表
create table users_copy as select * from users;
--增加數(shù)據(jù)到表中
方式1:insert into users values(1,‘1234’,‘d1’);
方式2:insert into users (id,name)values(2,‘d2’);
--查詢數(shù)據(jù)
最簡單的 select * from users;
條件查詢 select * from users where id=1 ;
select * from users where id=1 and name=‘d1’ ;(and表示且的意思)
select * from users where id=1 or id=2 ;(or表示或的意思)
select * from users where id in(1,3,4);(or的條件多了,用in)
select * from users where id》=2;(可以有大小條件)
select count(*) from users;(查詢有多少條數(shù))
select * from employ where name like ‘%duan%’;(模糊查詢)
select * from employ where name like ‘duan%’;(模糊查詢,表示以duan開頭---結(jié)尾反之)
select distinct name from users;(除去重復(fù)記錄)
select * from employ order by id;(由小到大)
select * from employ order by id desc;(反之順序排列)
查詢的時(shí)候可以計(jì)算
select name,salary salary*12 from employ;(員工的年薪)
select name,salary+bonus from employ;(員工的月薪)
分組查詢
select job, count(*)from emp_ning group by job;
過濾分組結(jié)果:having短語
select deptno, count(*)from emp_ning group by deptno having count(*) 》= 5;
子查詢(即用某一查詢語句代替語句中要寫的數(shù)據(jù))
select name from emp_ning where salary 》 (select salary
from emp_ning where id = 1002);
--子查詢的結(jié)果集是多行多列(結(jié)果如果返回多行,使用in, 》all, 》any, 《all, 《any)
select name, salary, deptno from emp_ning
where (deptno, salary) in(select deptno, max(salary)from emp_ning group by deptno);
--子查詢的結(jié)果如果返回一行( 使用單行比較運(yùn)算符(=, 》, 《, 《=, 》=) )
select name, deptno, salary from emp_ning
where (deptno, salary) =(select deptno, max(salary)from emp_ning where deptno = 10
group by deptno);
關(guān)聯(lián)查詢
等值連接:(自連接為特殊情況)
內(nèi)連接:
select emp.name,dept.dname from emp join dept on emp.deptno =dept.deptno;
外連接:(若為left 表示左邊的為驅(qū)動表(會全部顯示) 右邊的為匹配表 反之。。。。)
外連接的結(jié)果集 = 內(nèi)連接的結(jié)果集 + 驅(qū)動表中在匹配表中找不到匹配記錄的 數(shù)據(jù)和空值的組合
select e.name, d.dname from emp_ning e left outer join dept_ning d on e.deptno = d.deptno;(emp的全部)
select e.name, d.dname from emp_ning e lright outer join dept_ning d on e.deptno = d.deptno;(dept的全部)
非等值連接:
select e.name,s.salary from emp e join salary s on e.sa
lary between s.lowsal and s.highsal;
查詢的總格式:
select 表1.列1, 表1.列2, 表2.列1,表2.列2,。。。。[組函數(shù)][單行函數(shù)]
from 表1
[left|right|full outer join 表2
on 表1.列1 = 表2.列2
where 條件1 and 條件2[子查詢] or 條件3
group by 列
having 組函數(shù)的條件[子查詢]
order by 列]
--更新數(shù)據(jù)的語句
update users set pwd=‘1234’ where id=2;
--刪除某行
delete from t_user where user_id = 1;
--刪除表結(jié)構(gòu) drop table users;
SQL語句中的函數(shù)( mysql為例子)
select *,round(salary*2.12222222,4) from employ;(round函數(shù),省略到小數(shù)點(diǎn)后4位的全部信息)
select now();(查詢當(dāng)前時(shí)間)
組函數(shù) count / max / min / sum / avg
oracle數(shù)據(jù)庫中的分頁
select * from (select user_id,psort_id,user_name,user_age,insert_time,rownum as num from tb_user )t where num between ? and ?
???表示他們從第幾位到第幾位(非下標(biāo))
mysql中的分頁
select * from d_book limit 0,5;
表示從下標(biāo)為0的開始,每頁五條
在mysql中 setnames utf8 可以解決查看數(shù)據(jù)庫時(shí)亂碼問題
下面是創(chuàng)建一個(gè)sqlserver數(shù)據(jù)庫的代碼模板,加上一個(gè)創(chuàng)建表的模板。開發(fā)的時(shí)候可以拷貝過去直接改動一下就可以用了。
USE [master]
GO
IF EXISTS(SELECT 1 FROM sysdatabases WHERE NAME=N‘HkTemp’)
BEGIN
DROP DATABASE HkTemp --如果數(shù)據(jù)庫存在先刪掉數(shù)據(jù)庫
END
GO
CREATE DATABASE HkTemp
ON
PRIMARY --創(chuàng)建主數(shù)據(jù)庫文件
(
NAME=‘HkTemp’,
FILENAME=‘E:\Databases\HkTemp.dbf’,
SIZE=5MB,
MaxSize=20MB,
FileGrowth=1MB
?。?/p>
LOG ON --創(chuàng)建日志文件
(
NAME=‘HkTempLog’,
FileName=‘E:\Databases\HkTemp.ldf’,
Size=2MB,
MaxSize=20MB,
FileGrowth=1MB
?。?/p>
GO
--添加表
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘Hksj_User’) AND type in (N‘U’))
BEGIN
CREATE TABLE Hksj_User
(
Id INT IDENTITY(1,1) NOT NULL,
SName NVARCHAR(20) NOT NULL,
SNickName NVARCHAR(20),
SPassWord NVARCHAR(30) NOT NULL,
SCreator NVARCHAR(20),
SEmail NVARCHAR(50),
SPhone NVARCHAR(50),
SIdentifyId NVARCHAR(30),
DLastTimeLogOn DATETIME
PRIMARY KEY CLUSTERED
?。?/p>
Id ASC
?。¦ITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
?。?ON [PRIMARY]
END
GO
--添加注釋
EXEC sys.sp_addextendedproperty @name=N‘MS_Description’, @value=N‘登錄名’ , @level0type=N‘SCHEMA’,@level0name=N‘dbo’, @level1type=N‘TABLE’,@level1name=N‘Hksj_User’, @level2type=N‘COLUMN’,@level2name=N‘SName’
GO
EXEC sys.sp_addextendedproperty @name=N‘MS_Description’, @value=N‘郵箱’ , @level0type=N‘SCHEMA’,@level0name=N‘dbo’, @level1type=N‘TABLE’,@level1name=N‘Hksj_User’, @level2type=N‘COLUMN’,@level2name=N‘SEmail’
寫myeclipse鏈接sql數(shù)據(jù)庫的類的代碼例子
可以用jdbc來連接數(shù)據(jù)庫,完整代碼如下:
package com.jdbc.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) throws Exception {
//1.加載驅(qū)動
//Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
//Class.forName(“com.mysql.jdbc.Driver”);
Class.forName(“oracle.jdbc.driver.OracleDriver”);
//2.創(chuàng)建數(shù)據(jù)庫連接對象
//Connection conn = DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;databaseName=db”,“sa”,“sqlpass”);
//Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8”,“root”,“123456”);
Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,“scott”,“Oracle123”);
//3.創(chuàng)建數(shù)據(jù)庫命令執(zhí)行對象。
Statement stmt = conn.createStatement();
// PreparedStatement ps = conn.prepareStatement(“select * from t_user”);
//4.執(zhí)行數(shù)據(jù)庫命令
ResultSet rs = stmt.executeQuery(“select * from t_user”);
// ResultSet rs = ps.executeQuery();
//5.處理執(zhí)行結(jié)果
while (rs.next()) {
int id = rs.getInt(“id”);
String username = rs.getString(“username”);
String password = rs.getString(“password”);
System.out.println(id + “\t” + username + “\t” + password);}
//6.釋放數(shù)據(jù)庫資源
if (rs != null) {
rs.close();
}
// if (ps != null) {
// ps.close();
// }
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
}
評論