数据库SQL的基础知识
【补充数据库基本知识点】
数据库是按照一定的数据结构来组织、存储和管理数据的仓库
数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库
1、数据库表的完整性约束:域约束(表中字段取值范围)、主码约束(主键,唯一确定一条记录)、外码约束(表中一个字段,确实另外一张表的主码)
用SQL语句生成外键:
//为foods表的CategoryId字段生成外键fk_Foods_Category
alter table foods add constraint fk_Foods_Category foreign key(CategoryId) references Category(id);
####-----增加外键的方法------#####
#######alter table 需加外键的表 add constraint 外键名 foreign key(需加外键表的字段名) referencnes 关联表名(关联字段名);#####
2、SQL语句补充
在描述SQL有关语句格式时,常常用到一些符号
[ ]:表示可选项,即方括号中内容可以根据需要进行选择
{ } :表示必选项
<> :表示尖括号中的内容是用户必须要提供的参数
| :表示有多个选项时只能选择一项,多个选项之间用 ‘ | ’隔开
[ , …n] :表示前面的项可重复n次,相互之间用‘ ,’隔开
A、创建数据库的SQL命令
CREATE DATABASE
Eg: CREATE DATABASE Student;//创建Student数据库
B、表的操作
(1)sql语句创建表
CREATE TABLE([],[]…,[]);
Eg:CREATE TABLE Students(sno CHAR(9) NOT NULL PRIMARY KEY,
sName CHAR(12) NOT NULL , sex CHAR(2) , age INT);
(2)删除表
DROP TABLE
(3)修改表结构
ALTER TABLE[ALTER COLUMN ] |
ADD COLUMN 子句—增加新字段及相应的完整性约束条件
DROP COLUMN 子句 –删除表中字段
DROP CONSTRAINT 子句—删除完整性约束
Eg:
ALTER TABLE Student ADD COLUMN phone CHAR(11);
C、表数据操作
(1)插入数据:
INSERT INTO[([,]…)] VALUES([,]…)
Eg:
Insert into Student(sNO,sName,sex,age) values(‘201201009’,’隔壁老王’,‘男’,18);
(2)修改数据
UPDATE SET =[,==[WHERE ];
Eg:update Student set age=20 where sNO=‘201201009’;
(3)删除数据
DELETE FROM [WHERE ]
Eg:delete from Student where sNo=’201201009’;
(4) 查询数据
SELECT [ALL | DISTICT][TOP n [PERCENT]]{ * | {||}
[[AS ]|[[AS] ]][ , …n]}
FROM [WHERE ]
[GROUP BY [HAVING]]
[ORDER BY [ASC | DESC]];
参数说明:
ALL—显示结果集中的所有数据,包括重复行,ALL是默认设置
DISTINCT—显示结果集中不重复的所有行
GROUP BY 子句—按照进行分组,该字段值相同的分为一个组,分组后每组只显示一个结果;如果GROUP BY子句带HAVING 子句,则只有满足HAVING指定条件的组才会输出,有过GROUP BY 有多个字段名,则按照第一个字段分组,再按照第二个字段分组,以此类推
HAVING 子句---分组条件与WHERE 子句中的条件格式类似
ORDER By 子句---只有两个结果一个是ASC升序(系统默认),一个DESC降序;ORDER BY子句需要放到查询语句的最后
A、简单查询
Eg:Select sNO as 学号,sName as 姓名 from Student where age betwwen 18 and 20 ;
将年龄在18到20及之间满足条件的结果返回
【注】v1 betwwen v2 and V3 相当于v1>=v2 and v1<=v3
v1 not betwwen v2 and V3 相当于v1v3
Where 常用的运算符及功能
运 算 符
功 能
=、>、=、<=、!=、<>
比较范围
betwwen and、not betwwen and
在某个范围之间(包含两端)
In 、not in
数据在某一个集合
Like 、not like
字符模糊匹配
Is null、is not null
判断空值
and、or、not
逻辑运算(与或非)
B、多重条件查询
Eg:select * from Student where dep=’计算机’ and sex=‘男’;
C、模糊查询
[not] like
模糊查询时中可以含有的通配符
通配符
功能
实例
%
代表0个或多个字符
‘ab%‘ 表示’ab’后可接任意字符串
_(下划线)
代表一个字符
‘a_b’表示‘a’与‘b‘之间可为任意单个字符
[ ]
代表在某一范围的字符
[0-9]表示0~9之间的字符
[^ ]
表示不在某一范围的字符
[^0-9]表示不在0~9之间的字符
Eg:select * from student where sName Like ’李%’;
D、常用的统计函数汇总查询
常用的统计函数及功能
函 数 名
功 能
AVG()
求字段名所在列的平均值(必须是数值型)
SUM()
求字段名所在列的总和(必须是数值型)
MAX()
求字段名所在列的最大值
MIN()
求字段名所在列的最小值
COUNT(*)
统计个数
COUNT([DISTINCT])
统计不重复列的个数
Eg:select AVG(grade) as 平均成绩 from score;
E、OEDER BY 子句
Eg:select sNo,grade from Score where cNo=‘c001‘ ORDER BY grade DESC;
F、分组数据
GROUP BY子句可以按照关键字段的值来组织数据,关键字段相同的为一组,一般情况之下可以根据表中的某一个字段进行分组,并且要求使用统计函数,这样每一个分组就只有一个记录
Eg:
Select cNO,COUNT(*) as 人数 from Score GROUP BY cNO;
java连接数据库的基本操作过程
1、 JDBC是java程序中访问数据库的标准API,jdbc给java程序员提供访问和操纵众多关系数据库的一个统一的接口。
2、 JDBC的分类:
SQL Server JDBC、MySQL JDBC、Oracle JDBC、JDBC-ODBC(连接ACCESS)
3、 JDBC中主要的类与接口(有颜色的代表接口)
JDBC中主要的类与接口
类与接口
功 能 说 明
DriverManager
负责加载各种不同的驱动程序,根据不同的请求返回相应的
SQLException
代表数据库连接的建立、关闭或SQL语句的执行过程中发生的异常
Connection
数据库连接,负责与数据库间通讯
Statement
用以执行不含参数的静态SQL查询和更新,并返回执行结果
PreparedStatement
用以执行包含参数的动态SQL查询和更新
CallableStatement
用以获得数据库的存储过程
ResultSet
获得SQL查询结果
【注】使用JDBC访问数据库的基本步骤为:加载驱动程序、建立与数据库的连接、创建执行方式语句、执行SQL语句、处理返回结果和关闭创建的各种对象。
4、 建立与数据库的连接
(1) 加载JDBC驱动程序:利用Class.forName(JDBCDriverClass);
forName()是Class的静态方法,参数JDBCDriverClass是要加载的JDBC驱动程序类的名称,它是以字符串形式表达的类长名。
数据库的常用驱动程序类
数据库
驱动程序类
Access
sun.jdbc.odbc.JdbcOdbcDriver
SQL Server
com.microsoft.sqlserver.jdbc.SQLServerDriver
MySQL
com.mysql.jdbc.Driver
Oracle
oracle.jdbc.driver.OracleDriver
Eg:
Class.froName(“com.mysql.jsbd.Driver”);//加载MySQL数据库驱动
【注】创建数据库连接时Driver Manager类的常用方法
Public static Connection getConnection(String url,String user,String password);
url为链接数据库的url连接,用户名和密码为登录数据库的用户名和密码
DriverManager类的getConnection()是实现建立JDBC驱动程序到数据库连接的方法一般格式如下:
Connection conn=DriverManager.getConnection(url,user,password);
JDBC的URL
数据库
URL模式
Access
jdbc:odbc:dataSource
SQL Server
jdbc:sqlserver://hostname:port#;DatabaseName=dbname
MySQL
jdbc:mysql://hostname:3306/dbname
Oracle
jdbc:oracle:thin:@hostname:port#:oracleDBSID
例如连接MySQL数据库的操作:
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/Student”,”root”,”123456”);
简单操作数据库的实例代码
package com.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class dataBaseConnection {
//要加载的驱动类型
private static String driver="com.mysql.jdbc.Driver";
//连接数据库的URl
private static String url="jdbc:mysql://localhost:3306/foods";
//登录数据库的用户名
private static String user="root";
//登录数据库的密码
private static String password="root";
public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
String selectsql ="select * from foods where CategoryId=1";
try {
//加载驱动,同时需要在项目中add libraries连接驱动程序mysql-connector-java-5.1.26-bin.jar
Class.forName(driver);
//创建数据库连接
//conn=DriverManager.getConnection(url);这是错误方式,数据库登录用户名和密码没有添加
conn=DriverManager.getConnection(url,user,password);
//利用连接对象conn创建Statement接口对象,类似于游标的作用
stm=conn.createStatement();
//将sql语句作为参数传递给Statement的查询方法
rs=stm.executeQuery(selectsql);
//遍历查询结果集中的元素
while(rs.next()){
//利用集合中的getXXX(Colum)方法获得数据库表中Colum的内容
int foodsId=rs.getInt("FoodsId");
int CategoryId=rs.getInt("CategoryId");
String ChineseName=rs.getString("ChineseName");
String English=rs.getString("English");
String Description=rs.getString("Discription");
System.out.println(foodsId+" "+CategoryId+" "+ChineseName+" "+English+" "+Description);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭结果集对象
if(rs!=null) rs.close();
//关闭Statement对象
if(stm!=null) stm.close();
//关闭JDBC与数据库的连接对象
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}