日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

持续更新,mysql的复习强化路

發布時間:2024/3/13 数据库 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 持续更新,mysql的复习强化路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫與表的基本操作

  • 了解結構化查詢語言SQL
    sql是結構化查詢語言,是一門標準的計算機語言,用于訪問和操作數據庫,其主能包括數據定義、數據操縱、數據查詢和數據控制
    sql已稱為RDBMS的標準語言,單不同的RDBMS使用的SQL版本有一些差異。

    按功能用途可以將sql語言分為4類: ddl、dml、dql、dcl

    • DDL(數據定義語言) :用于數據庫、表視圖等的建立、刪除包括CREATE、ALTER、DROP
    • DML(數據操縱語言):用于添加、刪除和修改數據表中的記錄包括: INSERT、DELETE、UPDATE
    • DCL(數據控制語言):包括數據庫對象的權限管理和事務管理包括:COMMIT、ROLLBACK、GRANT
    • DQL(數據查詢語言):查詢是數據庫的基本功能包括: SELECT
  • 掌握數據庫相關操作
    DDL之數據庫
    創建數據庫

  • CREATE DATABASE 數據庫名

    刪除數據庫

    DROP DATABASE 數據庫名

    展示數據庫

    show databases;

    查看自己當前在哪個數據庫下工作

    select database();
  • 了解存儲引擎engine
    存儲引擎,就是如何存儲數據、如何更新數據、如何查詢數據、如何為存儲的數據建立索引等一系列技術的實現方法
    查看mysql支持的存儲引擎
  • show engines; 存儲引擎描述
    MyISAM擁有較快的插入、查詢速度,但不支持事務
    InnoDB支持ACID事務,支持行級鎖,支持外鍵;MySQL 5.5版本之后默認存儲引擎
    MRG_MYISAM將一組結構相同的MyISAM表聚合成一個整體,再進行增刪改查操作。
    Memory所有數據存儲再內存中,響應快,MySQL重啟時數據會全部丟失
    Archive歸檔,且有壓縮機制,適用于歷史數據歸檔
    CSV邏輯上由逗號分隔數據,會為每張表創建一個.csv文件。
  • 熟悉MySQL的數據類型
    在創建數據表時、準確的定義字段的數據類型比較重要
  • 數值類型

    類型所占字節數說明
    tinyint1小整數值,如狀態
    smallint2大整數值
    mediumint3大整數值
    int4大整數值
    bigint8極大整數值
    float4單精度浮點數值
    double8雙精度浮點數值
    decimalmax(D+, M+)含小數值,例如金額

    日期和時間類型

    類型所占字節數說明
    date3YYYY-MM-DD
    time3HH:MM:SS
    year1YYYY
    datetime8YYYY-MM-DD HH:MM:SS
    timestamp8YYYYMMDDHHMMSS

    字符串類型

    類型所占字節數說明
    char0~255定長字段串
    varchar0~65535變長字符串
    text0~65535長文本數據
    blob二進制形式文本數據
  • 熟悉MySQL的建表語法
    在DDL中對數據表的操作主要有3種: 創建、修改、刪除
    創建數據表,需要定義的信息主要包括: 表名、字段名、字段類型
  • mysql的建表語法

    create [temporary] table [if not exists] table_name [(create_definition,...)] [table_options][select_statement]

    temporary:臨時表,會話結束自動消失
    create_definition:定義表種各列屬性
    table_options:表配置,如存儲引擎、字符集
    select_statement: 通過select語句建表

  • 掌握數據表的相關操作
    示例建表
  • create table contacts( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), phone VARCHAR(20) ) ENGINE = InnoDB DEFAULT CHARSET=utf8;

    查看表

    show tables;

    查看表結構

    desc contacts;

    增加表結構

    alter table contacts add sex char(1);

    修改表結構

    alter table contacts modify sex int;

    刪除表結構

    alter table contacts drop column sex;

    刪除表

    drop table contacts;
  • 掌握如何向表中插入數據
    INSERT插入單條數據
  • INSERT INTO table_name(field1,field2,...,fieldN) VALUES (value1,value2,...,valueN);

    INSERT插入多條數據

    INSERT INTO table_name(field1,field2,...,fieldN) VALUES (valueA1,valueA2,...,valueAN),(valueB1,valueB2,...,valueBN);

    注意事項:

    • 如果字段是字符型,值必須適用單引號或者雙引號,如"value";如果值本身就有引號,需要轉義
    • 如果所有列都要添加數據,insert into 語句可以不指定列,即INSERT INTO table_name VALUES (valueA1,valueA2,…,valueAN);
  • 掌握如何修改(更新)表中的數據
    updata語法:
  • UPDATE table_name SET field1=newValue1,field2=newValue2[WHERE Clause]

    注意事項:

    • 可以同時更新一個或多個字段
    • 可以通過where子句來指定更新范圍,如果不帶where,則更新數據表中所有記錄。
    updata contacts set phone='12345678901' where name = "張三"
  • 掌握如何刪除表中的數據
    delete from table_name [WHERE Clause]
    注意事項:
    • 可以通過where子句來指定刪除范圍,如果不帶where,則刪除數據表中所有記錄

    示例總結:
    建表

    create table contacts( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), sex tinyint default 1, phone VARCHAR(20) ) ENGINE = InnoDB DEFAULT CHARSET=utf8;

    插數據

    insert into contacts(name,sex,phone) values("張三",1,"13200000001") insert into contacts(name,sex,phone) values("xiong\'s",1,"13200000002") // 有默認值的字段,可以不賦值也行的哈~ insert into contacts(name,sex,phone) values("李四",1,"13200000003"),("王五",1,"13200000004");

    修改(更新表)

    update contacts set sex = 2;updata contacts set sex = 1 where name="張三";updata contacts set sex = 2, phone="13200000005" where name="張三";

    刪除表內容

    delete from contacts where id =4; delete from contacts;
  • 了解什么是數據的完整性(準確性、正確性)
    數據完整性是指存儲在數據庫中的數據,應該保持一致性和可靠性
    關系模型允許定義三類數據約束,他們是事提完整性、參照完整性、以及用戶定義的完整性約束、其中前兩種完整性約束由關系數據庫系統自動支持
    • 實體完整性: 實體就是現實世界中的某個對象,RDBMS中一行代表一個實體,實體完整性就是保證每一個實體都能被區別
    • 域完整性: 域完整性主要是對列的輸入有要求,通過限制列的數據類型、格式或值的范圍來實現
    • 參照完整性: 主要是表與表之間的關系、可以通過外鍵來實現
    • 用戶自定義完整性: 借助存儲過程和觸發器實現
  • 掌握如何保證數據完整性(重點)
  • 實體完整性: 要求每張表都有唯一標識符,每張表中的主鍵字段不能為空且不能重復
    域完整性: 針對某一具體關系數據庫條件,保證表中某些列不能輸入無效值
    約束方法: 限制數據類型、檢查約束、默認值、費控約束
    參照完整性: 要求關系中不允許引用不存在的實體
    用戶自定義完整性: 反應某一具體應用所涉及的數據必須滿足語義要求。

    唯一性約束
    在Mysql中可以適用關鍵字UNIQUE實現字段的唯一性約束,從而保證實體完整性

    • unique意味著任何兩條數據的同一個字段不能有相同值
    • 一個表中可以有多個unique約束
    create table person( id int not null auto_increment primary key comment "主鍵id", name varchar(30) comment "姓名", id_number varchar(18) unique comment "身份證號" );

    外鍵約束
    外鍵(FOREIGN KEY)約束定義了表之間的一致性關系,用于強制參照完整性。外鍵約束定義了對同一個表或者其他表的列的引用,這些列具有PRIMARY KEY 或者 UNIQUE約束。

    # 學生表 create table stu( stu_no int not null primary key comment "學號", stu_name varchar(30) comment '姓名' ); # 成績表 create table sc(id int not null auto_increment primary key comment "主鍵id",stu_no int not null comment "學號",course varchar(30) comment "課程",grade int comment "成績",foreign key(stu_no) references stu(stu_no) );

    數據庫與表的基本操作

  • 了解select的完整語法
  • select column_name1,column_name2 from table_name [where where_condition] [group by {col_name | expr | position},...[with rollup]] [having where_condition] [ORDER BY {col_name | expr |position} [ASC | DESC],...[WITH ROLLUP]] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
  • 掌握適用select進行簡單查詢(重點)
    查詢所有
  • select * from person

    條件查詢

    select name, id_number from person select name,id_num from from person where name="張三";

    工具用法 (科普):

    select 8*9;
  • 熟練掌握where子句各類運算符的適用
    在sql中,insert、updata、delete和select后面都能帶where子句,用于插入、刪除、修改或查詢指定條件的記錄
  • sql語句中適用where子句用法

    select column_name from table_name where column_nam 運算符 value 運算符描述
    =等于
    <>或!=不等于
    >大于
    <小于
    >=大于等于
    >=小于等于
    between and選取介于兩個值之間的數據范圍;在Mysql中,相當于>=并且<=
  • 熟練掌握多條件查詢and、or的適用
    在where子句中,適用and、or可以把兩個或多個過濾條件結合起來
  • and、or運算符語法

    select column_name from table_name where condition1 and condition2 or condition3 運算符描述
    and表示左右兩邊的條件同時成立
    or表示左右兩邊只要有一個條件成立

    案例演示:

    use mydb;create table employee(id int not null auto_increment primary key,name varchar(30) comment "姓名",sex varchar(1) comment "性別",salary int comment "薪資(元)" );insert into employee(name,sex,salary) values("張三",'男',5500); insert into employee(name,sex,salary) values("李潔",'女',4500); insert into employee(name,sex,salary) values("李小梅",'女',4200); insert into employee(name,sex,salary) values("歐陽輝",'男',7500); insert into employee(name,sex,salary) values("李芳",'女',8500); insert into employee(name,sex,salary) values("張江",'男',6800); insert into employee(name,sex,salary) values("李四",'男',12000); insert into employee(name,sex,salary) values("王五",'男',3500); insert into employee(name,sex,salary) values("馬小龍",'男',6000); insert into employee(name,sex,salary) values("龍五",'男',8000); insert into employee(name,sex,salary) values("馮小芳",'女',10000); insert into employee(name,sex,salary) values("馬小花",'女',4000);# 單條件查詢男性工資 select * from employee where sex = "男"; select * from employee where sex != "女"; select * from employee where sex <> "女"; select * from employee where salary >= 10000; select * from employee where salary between 10000 and 12000;# 多條件,性別為男并且薪資大于等于10000 select * from employee where sex = "男" and salary >=10000;# 多條件,男性員工中,大于10000 或者 小于4000 select * from employee where sex = "男" and salary <=4000 or salary >=10000; # 以上錯誤寫法 or作用域它左右兩邊 select * from employee where sex = "男" and (salary <=4000 or salary >=10000);
  • 掌握運算符in 的使用
    運算符in允許我們在where子句中過濾某個字段的多個值
  • where 子句中使用in語法

    select column_name from table_name where column_name in (value1,value2,...)
  • 掌握運算符like的使用
  • where子句使用like語法

    select column_name from table_name where column_name like "%value%"

    說明:
    - like子句中的%類似于正則表達式中的*,匹配任意0個或多個字符
    - like子句中的_匹配任意單個字符
    - like子句如果沒有%和_就相當于運算符=的效果

    示例代碼:

    # 選擇id是1或者2或者3的 select * from emplyee where id=1 or id=2 or id=3; select * from emplyee where id in(1,2,3); #篩選張三 select * from emplyee where name like "張三"; # 篩選姓李的用戶 select * from emplyee where name like "李%"; # 篩選名字芳結尾的 select * from emplyee where name like "%芳";
  • 了解Mysql內置函數
    我們通常說的Mysql函數指的是Mysql數據庫提供的內置函數,包括數學函數,字符串函數,日期和時間函數,聚合函數條件判斷函數等,這些內置函數可以幫助用戶更加方便地處理表中的數據,簡化用戶操作
  • 函數描述
    數學函數ABS、SQRT、MOD SIN COS TAN COT等
    字符串函數length lower upper trim substring
    日期時間函數now curdate curtime sysdate data_format yera month week
    聚合函數count sum avg min max
    條件判斷函數if ifnull case when 等
    系統信息函數version database user等
    加密函數md5
  • 掌握常用函數的用法(重點)
  • 函數now()

    應用場景:
    在實際應用中,大多數業務表都會帶一個創建時間,create_time字段,用于記錄每一條數據的產生時間,在向表中插入數據時,就可以在insert語句中使用now()函數

    inser into user(id,name,create_time) values(1,"zhangsan",now());

    date_format()
    應用場景:
    在實際應用中,一般會按標準格式存儲日期/時間,如:2020-05-26 20:41:16. 在實際的查詢中,又可能有其他的格式要求,這時候就需要采用date_format()函數進行格式轉換。
    select name,date_format(birthday,'%Y%m%d') from user;
    聚合函數
    聚合函數是對一組值進行計算,并返回單個值。
    Mysql常用的聚合函數有5個,分別count、sum、avg、min和max.

    函數 | 描述 --- | --- count | 返回復核條件的記錄總數 sum | 返回指定列的總和,忽略空值 avg | 返回指定列平局值,忽略空值 min | 返回指定列的最小值, 忽略空值 max | 返回指定列的最大值,忽略空值

    示例代碼:

    # 男性數據有多少條 select count(*) from employee where sex = '男'; # 員工表里面的總薪資 select sum(salary) from employee; # 最低薪水 select min(salary) from employee; # 平均薪資 select avg(salary) from employee;

    如果有一條數據的工資為NULL它會自動把這條數據整體過濾掉。

    ifnull()

    函數ifnull()用于處理NULL值
    ifnull(v1,v2)如果V1的值不為NULL,則返回v1否則返回V2.

    示例代碼:

    insert into employee(name,sex,salary) values("張熊","男",null);

    case when

    case when 是流程控制語句,可以在sql語句中使用case when來獲取更加準確和直接的結果,sql中的case when類似于編程語句中的if else 或者switch

    case [col_name] when [value1] then [result1]...else [default] end case when [expr] then [result1]...else[default] end

    select id,name,case sexwhen '男' then 'F'when '女' then 'M'else ''end as sex, salary from employee;
  • 掌握排序的應用場景以及order by的使用
    我們已經掌握使用select語句結合where查詢條件獲取需要的數據,但是在實際應用中,還會遇到下面這類需求,又該如何解決?
    • 學生按升高從高到低進行排序
    • 雙十一交易量排行榜
    • 博客中的文章按先后順序顯示
      在sql中,使用order by對查詢結果集進行排序,可以按照一列或多列進行排序

    order by語法

    select column_name1,column_name2 from table_name1,table_name2 order by column_name,column_nam [asc|desc]

    說明: asc表示按升序排列,desc表示按降序排列
    默認情況按升序排列

    示例sql:

    select * from employee order by salary desc; # 按兩個字段進行排序 select * from employee order by sex,salary desc; # 以上就是說 先按性別排序,就會先顯示女再顯示男,然后再按薪水排序,整體出現的情況,先按薪資從大到小顯示女員工信息,再按薪資從大到小顯示男員工薪資。
  • 掌握分頁的應用場景以及limit的使用
    在select語句中使用limit子句來約束要返回的記錄數,通常使用limit實現分頁
  • limit語法

    select column_name1,column_name2 from table_name1,table_name2 limit [offset,]row_count

    說明: offset指定要返回的第一行的偏移量,第一行的偏移量是0,而不是1.row_count指定要返回的最大行數。這個offset對于新手來講,這個偏移量的說法很不友好我感覺,反正我第一次沒理解出來,就是從第幾條數據開始讀,讀多少條。 第一頁開始每頁顯示10條 limit 0,10

    示例sql:

    # 獲取前3條數據 select * from employee limit 3; # 分頁每頁顯示5條,顯示第一頁 select * from employee limit 0,5; # 分頁每頁顯示5條,顯示第二頁 select * from employee limit 5,5; # 分頁顯示每頁顯示5條,顯示第三頁 select * fromm employee limit 10,5;
  • 掌握group by 的應用場景及使用
    我們已經掌握使用select語句結合where查詢條件獲取需要的數據,但在實際的應用中,還會遇到下main這類需求,又該如何解決:
    • 公司想知道每個部門有多少名員工
    • 班主任想統計各科第一名的成績
    • 某門店想掌握男、女性會員的人數及平局年齡
      從字面上理解,group by表示根據某種規則對數據進行分組,它必須配合聚合函數進行使用,對數據進行分組之后需要進行count、sum、avg、max和min等聚合運算

    group by語法

    select column_name,aggregate_function(column_nam) from table_name group by column_name
  • aggregate_function表示聚合函數。

  • group by可以對一列或多列進行分組。

  • 掌握having的應用場景及使用
    在sql中增加having子句的原因是,where關鍵字無法與聚合函數一起使用,having子句可以對分組后的各組數據進行篩選

  • having語法

    select column_name,aggregate_function(column_name) from table_name where column_name operator value group by column_name having aggregate_function(column_name) operator value

    示例sql:

    # 把原有的employee表刪除了,創建這個表 create table employee(id int not null auto_increment primary key,name varchar(30) comment "姓名",sex varchar(1) comment "性別",salary int comment "薪資(元)",dept varchar(30) comment "部門" ); insert into employee(name,sex,salary,dept) values("張三", "男", 5500, "部門A"); insert into employee(name,sex,salary,dept) values("李潔", "女", 4500, "部門C"); insert into employee(name,sex,salary,dept) values("李小梅", "女", 4200, "部門A"); insert into employee(name,sex,salary,dept) values("歐陽輝", "男", 7500, "部門C"); insert into employee(name,sex,salary,dept) values("李芳", "女", 8500, "部門A"); insert into employee(name,sex,salary,dept) values("張江", "男", 6800, "部門A"); insert into employee(name,sex,salary,dept) values("李四", "男", 12000, "部門B"); insert into employee(name,sex,salary,dept) values("王五", "男", 3500, "部門B"); insert into employee(name,sex,salary,dept) values("馬小龍", "男", 6000, "部門A"); insert into employee(name,sex,salary,dept) values("龍五", "男", 8000, "部門B"); insert into employee(name,sex,salary,dept) values("馮小芳", "女", 10000, "部門C"); insert into employee(name,sex,salary,dept) values("馬小花", "女", 4000, "部門B"); insert into employee(name,sex,salary,dept) values("張熊", "男", 8800, "部門A");# 男性員工和女性員工的數量 select sex,count(*) from employee group by sex; # 統計每個部門的人數 select dept,count(*) from employee group by dept; # 知道每個工資薪水總和 select dept,sum(salary) from employee group by dept; # 每個部門薪資最高的 select dept,max(salary) from employee group by dept; # 每個部門薪資最低 select dept,min(salary) from employee group by dept; # 人數小于4個人的部門 select dept,count(*) from employee group by dept having count(*)<5;
  • 屬性group_concat的應用場景
    應用場景:
    • 使用group by可以分組統計每個部門有多少員工。加入,除了統計每個部門的員工數量之外,還想知道具體是哪些員工(員工列表),又該怎么實現呢?
  • 掌握group_concat的使用
  • group_concat

    group_concat配合group by一起使用,用于將某一列的值按指定的分隔符進行拼接,mysql默認的分隔符是逗號

    select dept,group_concat(name) from employee group by dept;
  • 掌握distinct的用法
    distinct用于在查詢中返回列的唯一不同值(去重復),支持單列或多列。在實際的應用中,表中的某一列含有重復值是很常見的,如employ表的dept列.如果在查詢數據時,希望得到某列的所有不同值,可以使用distinct
  • #distinct語法 select distinct column_name,column_nam from table_name;

    sql示例:

    # 性別這列去重 select distinct sex from employee;create table footprint(id int not null auto_increment primary key,username varchar(30) comment '用戶名',city varchar(30) comment "城市",visit_date varchar(10) comment "到訪日期" );insert into footprint(username, city, visit_date) values("liufeng", "貴陽", "2019-12-05"); insert into footprint(username, city, visit_date) values("liufeng", "貴陽", "2020-01-15"); insert into footprint(username, city, visit_date) values("liufeng", "北京", "2018-10-10"); insert into footprint(username, city, visit_date) values("zhangsan", "上海", "2020-01-01"); insert into footprint(username, city, visit_date) values("zhangsan", "上海", "2020-02-02"); insert into footprint(username, city, visit_date) values("lisi", "拉薩", "2016-12-20");# 有多少用戶在footprint留下足跡 select distinct username from footprint; # 所有的用戶達到過哪些城市 select dictinct city from footprint; # 每一個用戶去過哪些地方 select distinct username,city from footprint;
  • 熟悉表連接的幾種方式
    表連接(join) 是在多個表之間通過一定的連接條件,使表之間發生關聯,進而能從多個表之間獲取數據
  • 表連接語法

    select table1.column,table2.column from table1,table2 where table1.column1 = table2.column2;
  • 熟悉幾種表連接的區別
    • 內連接 join 或inner join
    • 外連接:左連接 left join,右連接 right join 全連接 full join
    • 自然連接:同一張表內的連接
    連接類型定義例子
    內連接至連接匹配的行select A.c1,B.c2 from A join B on A.c3 = B.c3
    左連接包含左表的全部行(不管右表是否存在與之匹配的行), 以及右表中遍布匹配的行select A.c1,B.c2 from A left join B on A.c3 = B.c3
    右連接包含右表的全部行(不管左表是否存在與之匹配的行), 以及左表中遍布匹配的行select A.c1,B.c2 from A right join B on A.c3 = B.c3
    全連接包含左右兩個表的全部行(不管在另一個表中是否存在與之匹配的行)select A.c1,B.c2 from A full join B on A.c3 = B.c3

    全連接: mysql里面無

  • 掌握多表連接查詢
  • # 創建兩張表 drop table if exists score; drop table if exists student;create table student( stu_no varchar(20) not null primary key comment"學號", name varchar(30) comment "姓名", address varchar(150) comment '地址' ); insert into student(stu_no,name,address) values('2016001','張三','貴州貴陽'); insert into student(stu_no,name,address) values('2016002','李芳','陜西興平'); insert into student(stu_no,name,address) values('2016003','張曉燕','江西南昌');create table score( id int not null auto_increment primary key, course varchar(50) comment '科目', stu_no varchar(20) comment "學號", score int comment '分數', foreign key(stu_no) references student(stu_no) );insert into score(course,stu_no,score) values('計算機','2016001',99); insert into score(course,stu_no,score) values('離散數學','2016001',85); insert into score(course,stu_no,score) values('計算機','2016002',78);# 表的數據特性,有個叫張曉燕 2016003的沒成績# 內連接(交集) select A.stu_no,A.name,B.course,B.score from student A join score B on(A.stu_no = B.stu_no); select A.stu_no,A.name,B.course,B.score from student A inner join score B on(A.stu_no = B.stu_no); select A.stu_no,A.name,B.course,B.score from student A where A.stu_no = B.stu_no;# 左連接 select A.stu_no,A.name,B.course,B.score from student A left join score B on(A.stu_no = B.stu_no);
  • 什么是自連接
    自連接時一種特殊的表連接,它是指互相連接的表在物理上同為一張表,但是邏輯上時多張表。自連接通常用于表中的數據有層次結構,如區域表、菜單表、商品分類等。
  • 自連接語法

    select a.column,b.column from table a,table b where a.column=b.column;

    示例sql:

    drop table if exists area; drop table if exists area;create table area( id int not null auto_increment primary key comment '區域id', pid int not null comment '父id(0-省份)', name varchar(30) comment '區域名稱' );insert into area(id,pid,name) values(1,0,'貴州省'); insert into area(id,pid,name) values(2,1,'貴陽'); insert into area(id,pid,name) values(3,1,'遵義'); insert into area(id,pid,name) values(4,0,'廣東省'); insert into area(id,pid,name) values(5,4,'廣州'); insert into area(id,pid,name) values(6,4,'深圳');# 查出所有城市 select * from area where pid<>0; # 查出這些城市的父親id select A.id,A.name,B.name ad provinceName from area A, area B where A.pid = B.id and A.pid<>0;
  • 掌握子查詢in的使用
    之前的課程中,我們已經學習過運算符IN,它允許我們在where子句中過濾某個字段的多個值。
  • where子句使用in語法

    select column_name from table_name where column_name IN(value1,value2,...);

    如果運算符in后面的值式來源于某個查詢結果,并非是指定幾個值,這時就需要用到子查詢。子查詢又稱為內部查詢或嵌套查詢,即在sql查詢的where子句中嵌套查詢語句

    子查詢in語法

    select column_name from table_name where column_name IN(select column_name from table_name [where] );
  • 掌握子查詢exists的使用
    exists是子查詢中用于測試內部查詢是否返回任何行的布爾運算符。將主查詢的數據放到子查詢中做條件驗證,根據驗證結果(TRUE 或FALSE)來決定主查詢的數據結果是否保留
  • where子句使用exists語法

    select column_name1 from table_name1 where exists (select * from table_name2 where condition);

    示例sql:

    # 看下student表數據 select * from score;# 要用in做一個子查詢 查詢所有選修了課程的學生 select A.* from student A where A.stu_no in(select B.stu_no from score B);# 查詢選修了離散數學的學生 select A.* from student A where A.stu_no in (select B.stu_no from score B where B.course='離散數學')# 要用exists做一個子查詢 查詢所有選修了課程的學生 select A.* from student A where exists(select * from score B where A.stu_no = B.stu_no); # 這個exists說一點個人的理解,先看子查詢里面的東西,也就是說子查詢查詢出來了一個表,這個時候就是說,A表查詢出來的數據,在查詢出來的這個表中存在就能輸出出來,不存在就不能輸出。

    總結

    以上是生活随笔為你收集整理的持续更新,mysql的复习强化路的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。