白奕田
首先掌握基本查詢,深入點再掌握數據庫表結構設計方法。
以下我們以某oracle數據庫中的表sys_user、sys_depetment和sys_employee舉例
表結構如下:
(1)、sys_user(用戶表)
(1)、sys_depetment(部門表)
(2)、sys_employee(僱員表)
ER圖到關係模式集的轉換
以二元聯繫類型的轉換為例
1. (實體類型的轉換):將每個實體類型轉換成一個關係模式,實體的屬性即為關係模式的屬性,實體標識符即為關係模式的鍵。
2. (聯繫類型的轉換):
1. 若實體間聯繫是1:1,可以在兩個實體類型轉換成的兩個關係模式中任意一個關係模式的屬性中加入另一個關係模式的鍵(作為外鍵)和聯繫類型的屬性。
2. 若實體間聯繫是1:N,則在N端實體類型轉換成的關係模式中加入1端實體類型的鍵(作為外鍵)和聯繫類型的屬性。
3. 若實體間聯繫是M:N,則將聯繫類型也轉換成關係模式,其屬性為兩端實體類型的鍵(作為外鍵)加上聯繫類型的屬性,而鍵為兩端實體鍵的組合。
實例:教學管理的ER圖轉換成關係模式集
教學管理的ER圖
第一步:把三個實體類型轉換成三個模式:
系(系編號,系名,電話)
教師(教工號,姓名,性別,職稱)
課程(課程號,課程名,學分)
第二步:
1. 對於1:1聯繫“主管”,可以再“系”模式中加入教工號(教工號為外鍵,用波浪線表示);
2. 對於1:N聯繫“聘用”,可以再“教師”模式中加入系編號和聘期兩個屬性(系編號為外鍵);
3. 對於1:N聯繫“開設”,可以再“課程”模式中加入系編號(系編號為外鍵)
這樣得到的三個模式成如下形式:
第三步:對於M:N聯繫“任教”,則生成一個新的關係模式:
第四步:整合後關係模式如下:
系統用戶(用戶編號,用戶姓名,用戶登錄名,用戶登錄密碼,僱員編號)
僱員(僱員編號,僱員姓名,年齡,性別,職務,部門編號)
部門(部門編號,部門名稱,部門編號)
1、增
insert into sys_user (USERID, USERCODE, USERPASS, EMPID, USERNAME, VALIDFLAG, LASTCHANGEDATE)
values ('c9e5d6f90f02428ea8a9cc4410dc5c06', 'Daibz', 'c4ca4238a0b923820dcc509a6f75849b',
'fd767722ffa741cf89db964873bf4f75', '代邦振', '1', to_date('07-05-2018 13:54:25', 'dd-mm-yyyy hh24:mi:ss'));
2、刪
delete from sys_user where usercode='Daibz'
3、改
update sys_user set userpass='c4ca4238a0b923820dcc509a6f75849b' where usercode='test'
update sys_user set userpass='1' where usercode='test'
4、查
select * from sys_user
select * from sys_employee
select * from sys_department
模糊查詢:
select * from sys_user where username like '代__'
select * from sys_user where username like '%代%'
多表查詢:
多表連接查詢通過表之間的關聯字段,一次查詢多表數據。
下面將依次介紹 多表連接中的如下方法:
1、from a,b
2、inner join
3、left outer join
4、right outer join
兩個表的deptno字段關聯。
1、from 表1,表2
語法:select a.x,b.y from a,b where a.id=b.id;
實例:
返回所有滿足where條件的行
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a, sys_department b
where a.depid = b.depid; 擴展:查詢用戶名,姓名,部門,密碼select u.username as 用戶名,e.empname as 姓名,d.depname as 部門,u.userpass as 密碼 from sys_user u,sys_employee e,sys_department d where u.empid=e.empid and e.depid=d.depid
2、inner join
語法:select a.x from a inner join b on a.id=b.id;
inner 可以省略.
實例:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a inner join sys_department b on a.depid = b.depid;
擴展:查詢用戶名,姓名,部門,密碼
select u.username as 用戶名,e.empname as 姓名,d.depname as 部門,u.userpass as 密碼
from (sys_user u inner join sys_employee e on u.empid=e.empid)
inner join sys_department d on e.depid=d.depid
3、left outer join
查詢結果除了返回包含連接條件的行,還包含左表(a)中不滿足連接條件的行,
其中不滿足連接條件的行中b表的字段值將被置為空。
語法:select a.x from a inner left outer join b on a.id=b.id;
outer 可以省略.
實例:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b
on a.depid = b.depid;
當查詢中出現過濾條件時:
1)當連接條件後面有where條件時:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b on a.depid = b.depid where a.empname like '%00%';
解釋:先根據連接條件a.depid = b.depid查詢,再對查詢結果按過濾條件查詢。
2)當連接條件後面有and條件時:
select a.empno as 員工編號, a.ename as 員工名稱, b.dname as 部門 from scott.emp a left outer join scott.dept b on (a.deptno = b.deptno and b.dname like 'SALES')
解釋:先對b表按過濾條件查詢,再對結果執行左連接查詢。
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b on (a.depid = b.depid and a.empname like '%00%');
4 、right outer join
查詢結果除了返回包含連接條件的行,還包含右表(b)中不滿足連接條件的行,
其中不滿足連接條件的行中a表的字段值將被置為空。
語法:select a.x from a inner right outer join b on a.id=b.id;
清水幽萍47587224
可以先網上下載一個vmware虛擬機在裝一個ubuntu(網上有安裝教程)。然後用sudo apt-get install sqlite3安裝數據庫,然後開始熟悉數據的基本常用操作命令,有了直觀操作感受後,後期可以直接在代碼裡來測試。
手動創建數據庫
說明:
1. 在一個語句結束後要以 ";"結束當前的輸入
2. 在系統命令,以"."開始的命令,不需要加分號
sudo apt-get install sqlite3
1. 創建數據庫
sqlite3 my.db
2. 顯示幫助信息
.help
3. 退出數據庫
.quit
.exit
4.顯示當前打開的數據庫文件
.database
5. 創建新表
create table student(number int,age int,name string);
6. 查看錶的結構
.schema student
7. 刪除一個表
drop table teacher;
8. 向表中加入記錄(行)
insert into student values(01,23,'zhang');
insert into student values(02,24,"li");
9. 查詢所有的記錄
select * from student ;
10. 根據指定條件搜索
select * from student where age==23;
select * from student where name='yang';
select * from student where number==02;
select * from student where number==2;
select * from student where name =="yang" and age ==24;
11.刪除記錄
delete from student where number =1;
12.修改表中的記錄
update student set age =20 where number=2 ;
13.在表中添加字段(列)
alter table student add column score float ;
14.不能刪除字段(列)
第一步:搜索所有的記錄,把記錄全部複製
第二步:新建一個表(此表沒有你要刪除的列)
第三步:把所有記錄插入新建的表中,刪除原有的表
技術小陳
首先你需要明白什麼是SQL語言:SQL語言是數據庫查詢以及程序設計的語言,用於存取數據以及查詢、更新、刪除等操作。 其次,要從這六方面去學習:數據查詢、數據操作、事物控制、數據控制、數據定義、指針控制。 一、數據查詢語言,是最常用的語言、基本語法為(大寫字母為關鍵字) SELECT 表字段1,表字段2,表字段3 FROM 表名 WHERE (條件) ORDER BY 表字段i GROUP BY 表字段1,表字段2,表字段3; 二、數據操作語言:這裡主要是數據的插入、更新、刪除動作; 1、插入 INSERT INTO 表名 (字段名1,字段名2,字段名3) VALUES(值1,值2,值3) ; 2、更新 UPDATE 表名 SET 表字段=值 WHERE 條件; 3、刪除 DELETE FROM 表名 WHERE 條件; 三、數據控制語言:最簡單理解為 控制可以訪問數據的對象 例如GRANT 關鍵字,定義某數據庫實例可以被某用戶控制 GRANT ALL PRIVILEGES ON 實例名 TO 用戶名; 四、事物控制語言;它的語句能確保被查詢語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令; 五、數據定義 :定義、刪除、更改庫、表、字段等 例如CREATE 關鍵字、CREATE DATABASE 數據庫名稱; 六、指針控制語言:像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作; 先了解這麼多,隨著學習深入,你自己就知道該去了解哪些知識了
工科男的執著
你好!
作為一名專業教數據庫的高校老師,回答下這個問題。
首先,學習一門語言的方式很多,比如sql語言,可以通過看教材,看教學視頻等等方式來自學,教材我推薦《SQL基礎教程》。對於新手來說這本教材還是很不錯的,附有講解視頻與代碼,並且這本教材內的知識點簡單易懂;
第二、除了找教材之外,最重要的就是要勤練練習,建議數據庫軟件採用mysql數據庫作為練習的數據庫,主要原因mysql數據庫容易上手,並且很普及。安裝的版本建議選擇mariadb(mysql的開源版本,免費的)版本,這個版本是自帶可視化工具,更容易上手,選擇windows版本即可;
第三、也是非常重要的一點,這也和我教過的學生多次強調,當學任何一門語言的時候,一定會遇到短時間內解決不了的問題,這時候不要放棄,首先要找到問題的原因所在,然後去網絡上查找解決方法,基本上通過網絡能夠解決掉百分之九十九的的技術問題,長期堅持下去一定會有收穫,發有發自內心的自豪感;
最好,我還要科普一下,sql語言是所有關係型數據庫的通用語言,就像英語仍然是全球的通用語言一樣,所以學好sql語言是 掌握數據庫應用的關鍵,目前市面上主流的關係性數據庫有mysql、oracle、db2等等。
備註:下載網址:https://downloads.mariadb.org/。
人工智能崔老師
mysqI值得你擁有,其實他們都有共通性,等你精通一樣的其他的語言你都可以觸類旁通!最好C語言,一起教學!這樣效果加倍!
悟空是我一念成佛
先給出我的核心觀點:學習,無論你是學什麼,也無論你有沒有基礎。思考永遠是第一位的,有些知識你沒接觸過不要緊,用不著害怕,也沒必要害怕。重要的是一秒鐘也不要停止思考,問題要想透徹,正所謂磨刀不誤砍柴工。尤其是作為工程師,要有打破砂鍋問到底的精神,否則你怎麼學都沒用。
首先概覽下mysql的知識體系:
基礎:
- sql語句
- 表結構設計
調優:
- 索引、慢查詢優化
- 配置參數調優
核心原理:
- InnoDb存儲引擎 (包括隔離級別、事務、鎖、緩存池、回滾日誌等等)
- Mysqld (包括連接管理、進程管理、查詢緩存、查詢優化、日誌等等)
架構與運維:
- 用戶與權限、安全
- 備份與恢復
- 日誌
- 分佈式與高可用
阿皮來啦
如果想快速入門,推薦先看這本《MySQL必知必會》,裝個軟件,邊看邊動手,兩週內即可入門。這本書講究實戰,沒有那麼多純理論。
此外MySQL語法與常見的其他近似,比如HIVE SQL,會一個別的數據庫也很容易入門。SQL百分之九十以上的都是差不多的,不同數據庫會有細微差異。
不編程亦分析
看了下評論,有人大量複製書本知識,或者是照本宣科的說。其實sql入門是完全可以自學的,當年我老婆在讀書時,數據庫考試不及格,還是我親自給補課6個小時,結果考了80多分,一下子變成sql高人,班上不會sql的都來找她問。
1、先要準備sql環境
目前市面上數據庫產品非常多,類型也很多,比如關係型數據庫、nosql、newsql之類的。初學者只建議學關係型數據庫,這也是計算機相關專業大學課程裡面要學的,是基礎。目前國內主流的關係型數據庫主要三種oracle,mysql,sql server,不廢話首選mysql,具體的我也不去說了,這裡面會講出一堆事。
用mysql首先去下載一個客戶端,可以去官網下載根據你的電腦是32還是64位來選擇。
再去下一個mysql的管理工具Navicat ,網上按照配置教程很多,可以去查下。
2、學習基本操作。
這個階段你可以買一本mysql入門的書,但是看書要講究技巧的。這是一門實戰的技術,講究實操,就是平時要多練習,多在Navicat 中操作,很多軟件工程師平時不寫sql都忘記了,讓他寫很基礎的還寫不出來。關於怎麼看書我有個心得:我覺得書的前面,介紹數據庫的基礎知識這些章節,先放在後面,等你會了再看,直接上手寫sql。重點看怎麼創建表,加字段,數據類型,再就是sql的增刪改查,常見的函數,索引,主外鍵就可以了,如果你能熟悉操作就入門了。
另外sql是數據庫的標準語音,數據庫是一門非常龐大且很複雜的學科,目前國產數據庫與國外差距很大,學習的內容非常多,希望你能學習順利早日成長為高手。
IT職場人
如果只是學SQL,就自學吧。
首先:自學的話,就先買本書,有關SQL的書非常多,就不給你推薦了;對著書,練習,這是唯一的方法;
其次:看完書後,並且也練習了,再在網上找個視頻教程看,跟著這個視頻再學一遍,當然也要練習;
然後:找一些比較好的成型的項目,進行分析和練習,這些項目最好是真實的項目,有助於你理解為什麼這樣寫;
最好:然後根據你學的能力,嘗試著做一些實例,最好多做幾遍;這個時候,你就成功啦!
祝你學習順利。
零點程序員
生敲硬被