国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Web數(shù)據(jù)庫基本知識(shí),SQL基本語法

這篇具有很好參考價(jià)值的文章主要介紹了Web數(shù)據(jù)庫基本知識(shí),SQL基本語法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡(jiǎn)介

當(dāng)我們談?wù)撜麄€(gè)技術(shù)棧時(shí),實(shí)際上涉及了一系列步驟,而在Web開發(fā)中,這些步驟可以被具體化為以下幾個(gè)階段:

DBMS->GUI->翻譯器->查詢語言

在web中具體如下:

postgreSQL->Hasura->Apollo+ts->GraphQL

具體解釋

  1. DBMS(數(shù)據(jù)庫管理系統(tǒng)):
    • 作用: 數(shù)據(jù)庫管理系統(tǒng)允許我們直接使用SQL語言來操作數(shù)據(jù)庫。
    • 類型: 分為關(guān)系型和非關(guān)系型數(shù)據(jù)庫,而在這里我們使用的是關(guān)系型數(shù)據(jù)庫,具體是 postgreSQL。
  2. GUI(圖形化界面):
    • 作用: 為了方便可視化管理數(shù)據(jù)庫,我們使用了Hasura,這是一個(gè)圖形化界面,讓我們更直觀地管理數(shù)據(jù)庫的內(nèi)容。
  3. 翻譯器:
    • 原因: 因?yàn)橹苯邮褂肧QL語句編程操控?cái)?shù)據(jù)庫有時(shí)候比較繁瑣。
    • 具體應(yīng)用: 在這個(gè)技術(shù)棧中,我們使用了Apollo,這就像一個(gè)翻譯官,把我們用 TypeScript(ts) 編寫的語句轉(zhuǎn)換成數(shù)據(jù)庫能理解的 SQL 語句。
  4. 查詢語言:
    • 作用: 為了使客戶端能夠按照自己的需求來獲取數(shù)據(jù),我們使用了GraphQL。
    • 特點(diǎn): GraphQL 允許客戶端明確地指定需要哪些數(shù)據(jù),避免了一次性獲取大量不必要的信息。

綜合起來,整個(gè)技術(shù)棧的流程是這樣的:我們通過圖形界面 Hasura 管理 postgreSQL 數(shù)據(jù)庫,通過 Apollo 翻譯 TypeScript 代碼為數(shù)據(jù)庫理解的 SQL 語句,并最終使用 GraphQL 作為查詢語言,使得客戶端能夠更精準(zhǔn)地獲取所需的數(shù)據(jù)。這樣的架構(gòu)有助于提高開發(fā)效率和靈活性。

數(shù)據(jù)庫

數(shù)據(jù)庫(DB)概述:

數(shù)據(jù)庫是一種安裝在操作系統(tǒng)上的軟件,用于存儲(chǔ)大量數(shù)據(jù),其存儲(chǔ)容量可達(dá)500萬。數(shù)據(jù)庫的主要作用是存儲(chǔ)和管理數(shù)據(jù)。

數(shù)據(jù)庫作用:

  1. 存儲(chǔ)數(shù)據(jù)
  2. 管理數(shù)據(jù)

數(shù)據(jù)庫分類:

  1. 關(guān)系型數(shù)據(jù)庫(SQL):
    • 類比于Excel,數(shù)據(jù)以表的形式存儲(chǔ),具有行和列。
    • 代表性的關(guān)系型數(shù)據(jù)庫有MySQL、Oracle、SQL Server、DB2、SQLlite。
    • 數(shù)據(jù)存儲(chǔ)通過表之間、行和列之間的關(guān)系來進(jìn)行。
  2. 非關(guān)系型數(shù)據(jù)庫(NoSQL - Not Only SQL):
    • 數(shù)據(jù)以{key: value}的形式存儲(chǔ),強(qiáng)調(diào)靈活性。
    • 代表性的非關(guān)系型數(shù)據(jù)庫有Redis、MongoDB。
    • 數(shù)據(jù)存儲(chǔ)通過對(duì)象的自身屬性來決定操作,支持動(dòng)態(tài)更新。

SQL

簡(jiǎn)介

SQL(Structured Query Language)是一種用于管理和操作關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的特定領(lǐng)域語言。它是一種標(biāo)準(zhǔn)化的語言,用于定義和操作關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)。SQL允許用戶執(zhí)行諸如查詢數(shù)據(jù)、插入新數(shù)據(jù)、更新現(xiàn)有數(shù)據(jù)和刪除數(shù)據(jù)等操作。

分為四種

  • DDL:數(shù)據(jù)庫定義語言(define)
  • DML:數(shù)據(jù)庫操作管理語言(manage)
  • DQL:數(shù)據(jù)庫查詢語言(query)
  • DCL:數(shù)據(jù)庫控制語言(control)

DDL

數(shù)據(jù)庫

創(chuàng)建

create database [if not exists] new;

刪除

drop database [if exists] old;

使用

use school;
-- 如果表名或字段名是一個(gè)特殊字符,就需要`name`

查看

show databases;
show create database school; -- 查看創(chuàng)建數(shù)據(jù)庫的語句

創(chuàng)建

格式

create table [if not exists] `表名`(
`字段名` 列類型 [屬性] [索引] [注釋],
)[表類型][字符集類型][注釋]
-- 行內(nèi)用空格分隔,每行后面跟英文逗號(hào),最后一行不加逗號(hào)

create table [if not exists] `student`(
`id` int(4) not null auto_increment comment '學(xué)號(hào)',
`name` varchar(30) not null default '匿名' comment '姓名',
`pwd` varchar(20) not null default '123456' comment '密碼',
`sex` varchar(2) not null default '女' comment '性別',
`birthday` datetime default null comment '出生日期',
`address` varchar(100) default null comment '家庭住址',
`email` varchar(50) default null comment '郵箱',
primary key(`id`)
)engine=innodb default charset=utf8

查看

show create table student; -- 查看student數(shù)據(jù)表的定義語句
desc student; -- 顯示student表的結(jié)構(gòu)

修改

alter table student rename as teacher;
alter table student add age int(2); -- 增加表的字段
alter table student modify age varchar(2); -- 修改字段約束
alter table student change age year varchar(4); -- 字段重命名
alter table student drop age;

刪除

drop table [if exists] student;

DML

添加

insert into student([`name`,`pwd`]) values('alice','123456'),('bob','qwerty');
-- 由于主鍵自增,我們可以省略
-- 如果不寫表的字段,默認(rèn)一一匹配

修改

update `student` set `name`='cathy', `pwd`='888888' where id = 1;
-- 不指定條件的情況下,會(huì)改動(dòng)所有行

修改的值可以是常值,也可以用變量賦值

條件:where子句,執(zhí)行邏輯判斷

常用操作符:

  • =, >, <, >=, <=:與Java相同
  • <>或!=:不等于
  • between…and…:閉區(qū)間
  • and:&&
  • or:||

刪除

delete from `student` where id=1;

清空

truncate table `student`;
-- 優(yōu)于delete from `student`

與delete相比

相同點(diǎn):都能刪除數(shù)據(jù),都不會(huì)刪除表結(jié)構(gòu)

不同點(diǎn):truncate會(huì)重新設(shè)置自增列,計(jì)數(shù)器會(huì)清零

DQL

創(chuàng)建數(shù)據(jù)庫

下面查詢演示基于這個(gè)數(shù)據(jù)庫

-- 創(chuàng)建一個(gè)school數(shù)據(jù)庫
CREATE DATABASE IF NOT EXISTS `school`;
USE `school`;

-- 創(chuàng)建學(xué)生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
    `studentno` INT(4) NOT NULL COMMENT '學(xué)號(hào)',
    `loginpwd` VARCHAR(20) DEFAULT NULL,
    `studentname` VARCHAR(20) DEFAULT NULL COMMENT '學(xué)生姓名',
    `sex` TINYINT(1) DEFAULT NULL COMMENT '性別,0或1',
    `gradeid` INT(11) DEFAULT NULL COMMENT '年級(jí)編號(hào)',
    `phone` VARCHAR(50) NOT NULL COMMENT '聯(lián)系電話,允許為空',
    `address` VARCHAR(255) NOT NULL COMMENT '地址,允許為空',
    `borndate` DATETIME DEFAULT NULL COMMENT '出生時(shí)間',
    `email` VARCHAR(50) NOT NULL COMMENT '郵箱賬號(hào)允許為空',
    `identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份證號(hào)',
    PRIMARY KEY (`studentno`),
    UNIQUE KEY `identitycard` (`identitycard`),
    KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 創(chuàng)建年級(jí)表
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade` (
    `gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年級(jí)編號(hào)',
    `gradename` VARCHAR(50) NOT NULL COMMENT '年級(jí)名稱',
    PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- 創(chuàng)建科目表
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
    `subjectno` INT(11) NOT NULL AUTO_INCREMENT COMMENT '課程編號(hào)',
    `subjectname` VARCHAR(50) DEFAULT NULL COMMENT '課程名稱',
    `classhour` INT(4) DEFAULT NULL COMMENT '學(xué)時(shí)',
    `gradeid` INT(4) DEFAULT NULL COMMENT '年級(jí)編號(hào)',
    PRIMARY KEY (`subjectno`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

-- 創(chuàng)建成績(jī)表
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result` (
    `studentno` INT(4) NOT NULL COMMENT '學(xué)號(hào)',
    `subjectno` INT(4) NOT NULL COMMENT '課程編號(hào)',
    `examdate` DATETIME NOT NULL COMMENT '考試日期',
    `studentresult` INT(4) NOT NULL COMMENT '考試成績(jī)',
    KEY `subjectno` (`subjectno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入學(xué)生數(shù)據(jù),這里只添加了2行,其余自行添加
INSERT INTO `student` (`studentno`, `loginpwd`, `studentname`, `sex`, `gradeid`, `phone`, `address`, `borndate`, `email`, `identitycard`)
VALUES
(1000, '123456', '張偉', 0, 2, '13800001234', '北京朝陽', '1980-1-1', 'text123@qq.com', '123456198001011234'),
(1001, '123456', '趙強(qiáng)', 1, 3, '13800002222', '廣東深圳', '1990-1-1', 'text111@qq.com', '123456199001011233');

-- 插入成績(jī)數(shù)據(jù),這里僅插入了一組,其余自行添加
INSERT INTO `result` (`studentno`, `subjectno`, `examdate`, `studentresult`)
VALUES
(1000, 1, '2013-11-11 16:00:00', 85),
(1000, 2, '2013-11-12 16:00:00', 70),
(1000, 3, '2013-11-11 09:00:00', 68),
(1000, 4, '2013-11-13 16:00:00', 98),
(1000, 5, '2013-11-14 16:00:00', 58);

-- 插入年級(jí)數(shù)據(jù)
INSERT INTO `grade` (`gradeid`, `gradename`) VALUES (1, '大一'), (2, '大二'), (3, '大三'), (4, '大四'), (5, '預(yù)科班');

-- 插入科目數(shù)據(jù)
INSERT INTO `subject` (`subjectno`, `subjectname`, `classhour`, `gradeid`)
VALUES
(1, '高等數(shù)學(xué)-1', 110, 1),
(2, '高等數(shù)學(xué)-2', 110, 2),
(3, '高等數(shù)學(xué)-3', 100, 3),
(4, '高等數(shù)學(xué)-4', 130, 4),
(5, 'C語言-1', 110, 1),
(6, 'C語言-2', 110, 2),
(7, 'C語言-3', 100, 3),
(8, 'C語言-4', 130, 4),
(9, 'Java程序設(shè)計(jì)-1', 110, 1),
(10, 'Java程序設(shè)計(jì)-2', 110, 2),
(11, 'Java程序設(shè)計(jì)-3', 100, 3),
(12, 'Java程序設(shè)計(jì)-4', 130, 4),
(13, '數(shù)據(jù)庫結(jié)構(gòu)-1', 110, 1),
(14, '數(shù)據(jù)庫結(jié)構(gòu)-2', 110, 2),
(15, '數(shù)據(jù)庫結(jié)構(gòu)-3', 100, 3),
(16, '數(shù)據(jù)庫結(jié)構(gòu)-4', 130, 4),
(17, 'C#基礎(chǔ)', 130, 1);

查詢

選擇

select version(); -- 查詢系統(tǒng)版本(函數(shù))
select 100*3-1 as 計(jì)算結(jié)果; -- 用于計(jì)算(計(jì)算表達(dá)式)
select @@auto_increment_increment; -- 查詢自增的步長(zhǎng)(變量)

查詢的是一個(gè)代碼表達(dá)式,參考順序

select [all | distinct]
{* | table.* | [table.field1[as alias1]][,table.field2[as alias2]][...]}
from table_name [as table_alias]
[left | right | inner join table_name2]
[where ...]
[group by ...]
[having]
[order by ...]
[limit {[offset,]row_count | row_countOFFSET offset}];

指定查詢字段

select * from student -- 查詢?nèi)繉W(xué)生
select `studentno`,`studentname` from student -- 查詢指定字段
select `studentno` [as] 學(xué)號(hào) from student -- 查詢結(jié)果中表頭用別名顯示,也可以給表起別名
select concat('姓名:',studentname) [as] 新名字 from student
select `studentresult`+1 as 提分后 from result

去重

select distinct `studentno` from result-- 查詢有哪些同學(xué)參加了考試

匹配

使用where條件子句

作用:檢索數(shù)據(jù)中符合條件的值
返回:布爾值
邏輯運(yùn)算符

  • and或&&:a and b
  • or或||:a or b
  • not或!:not a

例如

select `studentno` from result where not `studentno` = 1000

模糊

本質(zhì):比較運(yùn)算符

  • is null / is not null:是否為空
  • between and
  • like:a like b,SQL匹配,若a匹配b,則結(jié)果為真
  • in:a in (a1,a2,…),a在a1,a2,…中,則結(jié)果為真,必須完全符合
-- 查詢姓劉的同學(xué)
SELECT `studentno`, `studentname` FROM `student` WHERE `studentname` LIKE '劉%';

-- 查詢姓劉、名為單字的同學(xué)
SELECT `studentno`, `studentname` FROM `student` WHERE `studentname` LIKE '劉_';

-- 查詢姓劉、名為雙字的同學(xué)
SELECT `studentno`, `studentname` FROM `student` WHERE `studentname` LIKE '劉__';

-- 查詢名字中間有嘉字的同學(xué)
SELECT `studentno`, `studentname` FROM `student` WHERE `studentname` LIKE '%嘉%';

-- 查詢指定的學(xué)生
SELECT `studentno`, `studentname` FROM `student` WHERE `studentno` IN (1001, 1002, 1003);

-- 查詢家鄉(xiāng)為北京的學(xué)生,注意'北京%'是非法的
SELECT `studentno`, `studentname` FROM `student` WHERE `address` IN ('北京');

-- 查詢地址為空的學(xué)生
SELECT `studentno`, `studentname` FROM `student` WHERE `address` = '' OR `address` IS NULL;

連表

join on:連接查詢

where:等值查詢

on是對(duì)生成臨時(shí)表時(shí)的判斷條件(省空間),where是臨時(shí)表生成后對(duì)其篩選的條件

-- 查詢參加了考試的同學(xué)(要求得到其學(xué)號(hào)、姓名、科目編號(hào)、分?jǐn)?shù))
/*思路:
1、分析需求:分析查詢的字段來自哪些表
2、確定使用哪種連接查詢(這兩個(gè)表中哪個(gè)數(shù)據(jù)是相同的?)
3、確定判斷條件
*/
select s.studentno,studentname,subjectno,studentresult
from student as s
inner join result as r
on s.studentno = r.studentno

分頁和排序

排序:升序asc;降序desc

select s.studentno,studentname,subjectno,studentresult
from student as s
inner join result as r
on s.studentno = r.studentno
limit 5,5 -- 第6-10條數(shù)據(jù)

DCL

授權(quán)

GRANT SELECT, INSERT ON table_name TO user_name;

收回權(quán)限

REVOKE UPDATE ON table_name FROM user_name;

拒絕權(quán)限

DENY DELETE ON table_name TO user_name;

授予帶授權(quán)選項(xiàng)的權(quán)限

GRANT SELECT ON table_name TO user1 WITH GRANT OPTION;

創(chuàng)建角色

CREATE ROLE role_name;

將權(quán)限授予角色

GRANT role_name TO user_name;

從用戶中撤銷角色

REVOKE role_name FROM user_name;

數(shù)據(jù)庫設(shè)計(jì)

要求

糟糕的數(shù)據(jù)庫設(shè)計(jì)

  1. 數(shù)據(jù)冗余,浪費(fèi)空間:
    • 存在重復(fù)存儲(chǔ)相同信息的問題,導(dǎo)致占用不必要的存儲(chǔ)空間。
  2. 數(shù)據(jù)插入和刪除都會(huì)麻煩、異常:
    • 操作數(shù)據(jù)的插入和刪除操作可能會(huì)面臨困難和異常。
    • 拒絕使用物理外鍵,可能導(dǎo)致關(guān)聯(lián)性不清晰,增加了管理和維護(hù)的難度。
  3. 程序的性能差:
    • 數(shù)據(jù)庫設(shè)計(jì)的不良影響了程序的性能,可能導(dǎo)致查詢、更新等操作的效率低下。

良好的數(shù)據(jù)庫設(shè)計(jì)

  1. 節(jié)省內(nèi)存空間:
    • 通過優(yōu)化數(shù)據(jù)結(jié)構(gòu)和消除冗余,確保數(shù)據(jù)庫占用的內(nèi)存空間更有效利用。
  2. 保證數(shù)據(jù)庫的完整性:
    • 使用適當(dāng)?shù)募s束和關(guān)系,確保數(shù)據(jù)的完整性,防止不一致或錯(cuò)誤的數(shù)據(jù)存在。
  3. 方便我們開發(fā)系統(tǒng):
    • 數(shù)據(jù)庫設(shè)計(jì)應(yīng)當(dāng)有助于系統(tǒng)的開發(fā)和維護(hù),而不是成為開發(fā)過程的障礙。

步驟

  1. 分析需求:
    • 詳細(xì)分析業(yè)務(wù)需求,了解系統(tǒng)需要處理的數(shù)據(jù)和業(yè)務(wù)邏輯。
  2. 概要設(shè)計(jì):
    • 使用概要設(shè)計(jì)階段,繪制關(guān)系圖(E-R圖),以可視化的方式表示數(shù)據(jù)實(shí)體之間的關(guān)系,為后續(xù)詳細(xì)設(shè)計(jì)提供基礎(chǔ)。

三大范式

第一范式(1NF):

  • 定義: 數(shù)據(jù)庫的每一列都應(yīng)該是不可分割的原子數(shù)據(jù)項(xiàng)。
  • 例子: 在家庭信息表中,如果將"家庭人口"和"戶籍"拆分成兩列,違反了第一范式的要求。

第二范式(2NF):

  • 前提: 數(shù)據(jù)庫表必須滿足第一范式。
  • 要求: 表中每一列都應(yīng)與主鍵相關(guān),而不是只與主鍵的某一部分相關(guān)。這有助于消除部分子函數(shù)依賴。
  • 目的: 確保每張表只描述一件事情,避免冗余和不必要的復(fù)雜性。

第三范式(3NF):文章來源地址http://www.zghlxwxcb.cn/news/detail-769007.html

  • 前提: 數(shù)據(jù)庫表必須滿足第一和第二范式。
  • 要求: 表中的每一列數(shù)據(jù)都應(yīng)與主鍵直接相關(guān),而不能間接相關(guān)。這有助于消除傳遞依賴。
  • 目的: 進(jìn)一步規(guī)范化數(shù)據(jù),確保數(shù)據(jù)之間的關(guān)系更清晰、更簡(jiǎn)單,避免冗余和更新異常。

到了這里,關(guān)于Web數(shù)據(jù)庫基本知識(shí),SQL基本語法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包