java数据库的介绍和使用_java实现数据库的查询(Java教程)
生活随笔
收集整理的這篇文章主要介紹了
java数据库的介绍和使用_java实现数据库的查询(Java教程)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大家好,又見面了,我是你們的朋友風君子。如果您正在找激活碼,請點擊查看最新教程,關注關注公眾號 “全棧程序員社區(qū)” 獲取激活教程,可能之前舊版本教程已經失效.最新Idea2022.1教程親測有效,一鍵激活。
Jetbrains全家桶1年46,售后保障穩(wěn)定
數據庫
第一章 介紹
數據庫(DataBase,DB):指長期保存在計算機的存儲設備上,按照一定規(guī)則組織起來,可以被各種用戶或應用共享的數據集合。
數據庫管理系統(tǒng)(DataBase Management System,DBMS):指一種操作和管理數據庫的大型軟件,用于建立、使用和維護數據庫,對數據庫進行統(tǒng)一管理和控制,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統(tǒng)訪問數據庫中的數據。
第二章:常見數據庫管理系統(tǒng)
- MySQL
MySQL是一個關系型數據庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle旗下產品。MySQL 是最流行的關系型數據庫管理系統(tǒng)之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統(tǒng)) 應用軟件。 - Orcale
Oracle數據庫被認為是業(yè)界目前比較成功的關系型數據庫管理系統(tǒng)。Oracle數據庫可以運行在UNIX、Windows等主流操作系統(tǒng)平臺,完全支持所有的工業(yè)標準,并獲得最高級別的ISO標準安全性認證。 - DB2
DB2是IBM公司的產品,DB2數據庫系統(tǒng)采用多進程多線索體系結構,其功能足以滿足大中公司的需要,并可靈活地服務于中小型電子商務解決方案。 - Microsoft SQL Server
SQL Server 是Microsoft 公司推出的關系型數據庫管理系統(tǒng)。具有使用方便可伸縮性好與相關軟件集成程度高等優(yōu)點。
第三章:SQL語言(Structure Query Language)
DDL
Data Definition Language 數據定義語言
- 作用:用來定義數據庫對象:庫、表、列等
/* 操作數據庫 */
--增 create
create database 數據庫名; --創(chuàng)建新的數據庫
create database 數據庫名 character set GBK;--創(chuàng)建新的字符集為GBK的數據庫
--查 show
show databases;--查看DBMS中所有的數據庫
show create database 數據庫名;--查看數據庫的定義信息
--改 alter
alter database 數據庫名 character set utf8;--把數據庫改成utf8字符集
--刪 drop
drop database 數據庫名;--刪除數據庫
--其他
use 數據庫名;--使用數據庫
select database();--查看當前正在使用的數據庫
flush privileges;--刷新數據庫
/* 操作表 */
--增 create
create table 表名(--創(chuàng)建新表
字段名1 字段類型(長度) [約束],
字段名2 字段類型(長度) [約束],
...
);
--查 show
show tables;--查詢數據庫中有的表
show create table 表名;--查看表格的創(chuàng)建細節(jié)
desc 表名;--查看表的字段信息
--改 alter
alter table 表名 add 列名 數據類型[約束];--添加一個列
alter table 表名 change 舊列名 新列名 新數據類型[約束];--修改列的列名
alter table 表名 modify 列名 新數據類型[約束];--修改列的數據類型
alter table 表名 drop 列名;--刪除表的列
alter table 表名 AUTO_INCREMENT=5;--重新設置自增id
rename table 舊表名 to 新表名;--修改表名
alter table 表名 character set 字符集;--修改表的字符集
--刪 drop
drop table 表名;
drop table if exists 表名;--如果表存在,則刪除;如果不存在,也不會報錯.這種語句是MySql特有的語句,其他的數據庫都是不支持這種語法的
Jetbrains全家桶1年46,售后保障穩(wěn)定
DML
Data Manipulation Language 數據操作語言
- 作用:用來定義數據庫記錄(數據)
--增 insert
insert into 表名 values(字段值1,字段值2, ...);--全字段插入
insert into 表名(字段1) values(字段值1);--部分字段插入
insert into 表名 values(記錄1的所有字段),(記錄2的所有字段)...;--一次性插入多條 數據
--改 update
update 表名 set 列名1=列值1,列名2=列值2 ... where 列名=值;--修改操作
update 表名 set 列名1=列值1;--沒有where條件的,會直接修改所有列名的值
update 表名 set 列名1 = replace(列名1,'原內容','要替換的內容');--批量替換字段里的字符串
--刪 delete
delete from 表名 where 列名=值;--刪除表中條件是where的
delete from 表名;--刪除表中所有數據,表結構還在,刪除后的數據可以找回
truncate table 表名;--刪除表中所有數據,把表直接drop掉,然后再創(chuàng)建一個同樣的新表-刪除的數據不能找回。該命令會讓id重新從1開始自動遞增
DQL
Data Query Language 數據查詢語言
- 作用:用來查詢記錄(數據)
查詢語句的順序
書寫順序:select → from →join on → where → group by → having → order by → limit
執(zhí)行順序:from → join on → where → group by → having → select → order by → limit
/* 簡單查詢 */
select * from emp;--查詢所有列
select empno,ename,job from emp;--查詢指定的列
select empno as '編號',ename as '別名' from emp;--給列起別名(as可以省略可以使用"",''或者不使用引號)
select e.empno,e.ename from emp as e;--給表起別名,表中的字段也能通過表的別名來調用
/* 條件查詢 */
--條件語句 > < >= <= !=(<>) =
--and(&&)
select * from emp where deptno=10 and sal>2000;--可以使用&&帶代替
--or(||)
select * from emp where ename='smith' or sal=5000;--可以使用||來代替
--between...and
select * from emp where ename between 'A' and 'F';--BETWEEN AND作用于字符型的數據的時候,包含第一個邊界值,但是不包含第二個邊界值
--in(set)
select * from emp where sal in(800,1600);--in表示包含的意思
--is null
select * from emp where comm is null;--對于null的判斷不能使用=號
--not
select * from emp where deptno !=10;
select * from emp where deptno <>10;
select * from emp where not deptno =10;
select * from emp where comm is not null;
select * from emp where not comm is null;
--注意
--對于字符型的數據,是嚴格區(qū)分大小寫的
--Oracle在任何的平臺上都是嚴格區(qū)分字符型數據大小寫的
--MySql在Liunx/Unix平臺上嚴格區(qū)分字符型數據大小寫,但是在window平臺上不區(qū)分字符型數據大小寫
--可以使用BINARY關鍵字,讓MySql在window平臺上也嚴格字符字符型數據的大小寫
select * from emp where binary ename='smith';
/* 模糊查詢 */
select * from emp where ename like '_M%';-- _ :任意一個字母 查詢第二個字母是m的人
select * from emp where ename like '%m%';-- %:任意0~n個字母 查詢名字包含m的人
/* 字段控制查詢 */
select salary*12 as '年薪' from emp;--可以使用算術表達式將月薪以年薪的形式顯示
select distinct deptno from emp;--去掉重復值查詢
select *,sal+ifnull(comm,0) from emp;
/* 排序 */
select * from emp order by sal asc;--升序排序,可默認不寫
select * from emp order by sal desc;--降序排序
select * from emp order by sal desc,empno asc;--按月薪降序排序,如果月薪相同,按編號升序排序
/* 單行函數 */
--year(日期字段) 將日期格式化為年(月日時分秒同理)
select year(now())--輸出今年
select year('2018-01-01');--2018
--substr(被截取字段名稱,起啟下標,截取長度) 截取字符串的函數
select ename,substr(ename,2,1) from emp;
--length(str) 返回字符型數據的長度
select ename,length(ename) from emp;
select * from emp where length(ename)=5;--查詢名字的長是5的員工
--lower(str) 把字符型數據轉換為小寫的字符
select ename,lower(ename) from emp;
--upper(str) 把字符型數據轉換為大寫的字符
select * from emp where binary ename=upper('smith');
/* 聚合函數 */
--count() 統(tǒng)計指定列不為NULL的記錄行數
select count(*) from emp;
select count(*) from emp where sal+ifnull(comm,0)>2500
--max() 計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算
select max(sal) from emp;
--min() 計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算
select min(sal) from emp;
--sum() 計算指定列的數值和,如果指定列類型不是數值類型,那么計算結果為0
select sum(sal) from emp;
--avg() 計算指定列的平均值,如果指定列類型不是數值類型,那么計算結果為0
select avg(sal) from emp;
/* 分組查詢 */
--分組查詢
select deptno,sum(sal) from emp group by deptno;
--HAVING子句
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
--having與where的區(qū)別:where是先篩選后分組;having是先分組后篩選
/* LIMIT */
--分頁查詢
select * from emp limit 5;--查詢5行記錄,默認從0開始
select * from emp limit 0,5;--查詢5行記錄,起始行從0開始
select * from emp limit 3,10;--查詢10行記錄,起始行從3開始
--注意:LIMIT只能在MySql和SqlServer中有效
/* 多表查詢(跨表查詢) */
--聯(lián)合查詢
--說明:合并結果集就是把兩個select語句的查詢結果合并到一起,被合并的兩個結果:列數、列類型必須相同
--union 去除重復記錄
--union all 不去除重復記錄
--連接查詢
--內連接
--等值連接:建立在父子表關系上,用等號來連接兩個表
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e,dept d
where e.deptno=d.deptno;--SQL1992語法
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
inner join dept d on(e.deptno=d.deptno);--SQL1999語法
--使用內連接的時候,inner可以忽略
--非等值連接:兩個表之間沒有父子關系,用非等號來連接兩個表
select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
from emp e,salgrade s
where e.sal between s.losal and s.hisal;--SQL1992語法
select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
from emp e
join salgrade s on e.sal between s.losal and s.hisal--SQL1999語法
--自連接:使用別名將一個表虛擬成兩個表(父子表),然后再這兩個表上面做等值連接
select e.empno '員工編號',e.ename '員工姓名',m.empno '經理編號',m.ename '經理姓名'
from emp e,emp m
where e.mgr=m.empno && m.empno=7698--SQL1992語法
select e.empno '員工編號',e.ename '員工姓名',m.empno '經理編號',m.ename '經理姓名'
from emp e
join emp m on(e.mgr=m.empno)
where m.empno=7698--SQL1999語法
--外連接
--左外連接(LEFT OUTER JOIN):左外連接可以把左表中不滿足對應關系的數據查詢出來
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
left outer join dept d on e.deptno=d.deptno;--使用外連接的時候,outer可以忽略
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from dept d
left join emp e on e.deptno=d.deptno;--左表的位置是相對的
--右外連接(RIGHT OUTER JOIN):右外連接可以把右表中不滿足對應關系的數據查詢出來
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
right join dept d on e.deptno=d.deptno;
--全外連接(FULL OUTER JOIN):可以把左右兩個表中不滿足對應關系的數據都查詢出來
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
full join dept d on e.deptno=d.deptno;--Oracle支持全外連接,MySql不支持全外連接
--join的更多用法見下表
--子查詢
--1.用來給主查詢提供查詢條件或查詢數據而首先執(zhí)行的一個查詢
--2.主查詢使用子查詢的結果
--子查詢必須要放在()里面
--分類
--出現在where中的子查詢,用來給查詢提供查詢條件的
select * from emp
where sal>(select max(sal) from emp where deptno=30);--查詢高于30部門所有人工資的員工信息
--出現下from后面的子查詢,用來給主查詢提供查詢數據的(all,any)
select * from emp
where sal>all(select sal from emp);--查詢高于30部門所有人工資的員工信息
--(了解)出現在查詢列表中的子查詢,功能類似于外連接的效果
常用函數
/* 數據函數 */
-- abs() 取絕對值
select abs(-1); -- 1
-- round() 用于數據的四舍五入
select round(13.26723,2);-- 結果13.27
--rand() 生成隨機數
select rand();--生成一個0到1之間的隨機數
-- ceiling() 向上取整
select ceiling(2.5); -- 3
-- floor() 向下取整
select floor(2.5); -- 2
-- sign() 符號函數: 負數返回-1,正數返回1,0返回0
select sign(2); -- 1
/* 字符串函數 */
-- char_length(str) 返回字符串包含的字符數
select char_length('abcdef'); -- 6
-- concat() 合并字符串,參數可以有多個
select concat('我愛','北京','天安門'); -- 我愛北京天安門
-- insert() 替換字符串,從某個位置開始替換某個長度
select insert('一二三四五六七',1,3,'八八八'); -- 八八八四五六七
-- lower() 把字符型數據轉換為小寫的字符
select lower('Manaphy'); -- manaphy
-- upper() 把字符型數據轉換為大寫的字符
select upper('Manaphy'); -- MANAPHY
-- left() 從左邊截取字符串
select left('Manaphy',3); -- Man
-- right() 從右邊截取字符串
select right('Manaphy',3); -- phy
-- replace() 替換字符串
select replace('一二三四五六七','四五','八九'); -- 一二三八九六七
-- substr(被截取字段名稱,起啟下標,截取長度) 截取字符串的函數
select substr('一二三四五六七',1,3); -- 一二三
-- reverse() 反轉字符串
select reverse('一二三四五六七'); -- 七六五四三二一
/* 日期函數 */
-- year(日期字段) 將日期格式化為年(月日時分秒同理)
select year(now());-- 輸出今年
select year('2018-01-01');-- 2018
-- 獲取當前日期
select current_date();
select curdate();
-- 獲取當前日期和時間
select now();
select localtime();
select sysdate();
-- 獲取當前時間
select curtime();
select current_time();
DCL
Data Control Language 數據控制語言
- 作用:用來定義訪問權限和安全級別
/* 實體完整性 */
--主鍵約束 primary key 說明:每個表中要有一個主鍵, 數據唯一, 且不能為null
create table stu(
id int primary key
);--創(chuàng)建表時指定主鍵
create table stu(
id int,
name varchar(10),
primary key(id,name)
);--聯(lián)合主鍵,創(chuàng)建了兩個列作為主鍵
create table stu(
id int,
name varchar(10)
);
alter table stu add primary key(id);
alter table stu modify id int primary key;--在已經有表的情況下使用
--唯一約束 unique 說明:數據不能重復
create table stu(
id int primary key,
name varchar(50) unique
);
--自動增長列
--auto_increment(mysql)
--identity(sqlserver)
--sequence(oracle)
--說明:給主鍵添加自動增長的數值,列只能是整數類型
create table stu(
id int primary key auto_increment
);--mysql的方式
/* 域完整性 */
--數據類型
--數值類型:tinyint(1字節(jié)) int(4字節(jié)) bigint(8字節(jié)) folat(4字節(jié)) double(8字節(jié)) decimal
--日期類型
date--1000-01-01/9999-12-31
datetime--1000-01-01 00:00:00/9999-12-31 23:59:59
timestamp--1970-01-01 00:00:00/2038 結束時間是第 2147483647(2^31-1)秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07
time--'-838:59:59'/'838:59:59' (±35天)
year--1901/2155
--字符串類型:char(定長字符串) varchar(變長字符串) binary varbinary text(長文本數據) enum set
--非空約束
create table stu(
id int primary key,
name varchar(10) not null
);
--默認值約束
create table stu(
id int primary key,
sex varchar(2) default '男'
);--默認是男
insert into stu(id) values(1);--默認是男
insert into stu values(2,default);--默認是男
insert unto stu values(3,null);--此處是null
--check約束
check(sex='男' or sex='女')--(mysql不支持)
/* 引用完整性 */
--外鍵約束
alter table 左表 add foreign key(左表的某個字段) references 右表(主鍵);
create table 表名(
id int primary key,
name varchar(20),
classno bigint,
foreign key(classno) references tb_class(classno);
--注意
--1.從表的列引用了主表的主鍵,那么該列就稱為外鍵
--2.外鍵的名字可以不相同
--3.外鍵的數據類型必須與主表中主鍵的數據類型完全相同
--4.外鍵可以是null值
/* 表與表之間的關系 */
--1.一對多: 一張表中的一條記錄再另一張表中出現多次
--2.多對多: 要想兩張表之間實現多對多的關系,必須有一張中間表,通過中間表創(chuàng)建與兩張表的外鍵約束,實現多個一 對多,使用這種方式創(chuàng)建外鍵約束,非常適合實現多個一對多。
--3.一對一:一張表里的記錄,在另外一張表里只能出現一次.表和表之間的關系必須通過外鍵來創(chuàng)建,但是外鍵一創(chuàng)建就是一對多,因此在從表里將外鍵設置唯一性約束,實現一對一
總結
以上是生活随笔為你收集整理的java数据库的介绍和使用_java实现数据库的查询(Java教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电瓶冲电多长时间为好
- 下一篇: 再次新增