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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql增删查改------插入与查询数据

發布時間:2023/12/16 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql增删查改------插入与查询数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql增刪查改

  • 插入數據
  • 查詢數據
    • MySQL聚合函數
    • 聯結查詢
      • 內聯結查詢
        • 傳統方式----where
        • 新方式-----inner join方式
        • 自聯結查詢
      • 外聯結查詢
        • 左聯結查詢
        • 右聯結查詢
        • 復合條件聯結查詢--------內聯結
    • 子查詢
      • 帶some/any 與all的子查詢之間的區別
      • 帶(not) exists 的查詢
      • 帶(not) in的查詢
      • 聯結查詢和子查詢的比較
      • 帶比較運算符的子查詢
    • 合并查詢
      • 帶 all的union 與不帶的區別
    • 用正則表達式查詢
      • 1,匹配開始/結尾的字符
      • 匹配任一字符
      • 匹配多個字符
      • 匹配字符串

插入數據

插入數據時候----

同時插入多行記錄的INSERT語句等同于多個單行插入的INSERT語句,但是多行的INSERT語句在處理過程中效率更高。因為MySQL執行單條INSERT語句插入多行數據比使用多條INSERT語句快,所以在插入多條記錄時最好選擇使用單條INSERT語句的方式插入。

傳統插入方式不在贅述,
向大部分數據庫一樣,mysql也支持將查詢的列插入到某一張表中;

建表----插入----然后清空

mysql> select * from emp2; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+ 14 rows in set (0.00 sec)mysql> truncate emp2; Query OK, 0 rows affected (0.11 sec)mysql> select * from emp2; Empty set (0.02 sec)

之后

-- 可以選擇指定字段, -- mysql> insert into emp2 select * from emp; Query OK, 14 rows affected (0.04 sec) Records: 14 Duplicates: 0 Warnings: 0mysql> select * from emp2; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 40 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 40 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+ 14 rows in set (0.00 sec)

查詢數據

建表什么的不在贅述,

直接上活-----

mysql> select * from userinfo order by score desc ,height; +------+----------+--------+-------+--------+ | id | name | gender | score | height | +------+----------+--------+-------+--------+ | 1005 | 古力娜華 || 145.6 | 166.7 | | 1002 | 李四 || 130.5 | 167.3 | | 1001 | 張三 || 128.8 | 173.4 | | 1009 | 李二狗 || 123.4 | 178.9 | | 1004 | 李六 || 123.4 | 180.4 | | 1010 | 王建國 || 120.9 | 166.4 | | 1003 | 王五 || 111.7 | 177.8 | | 1008 | Gavin || 111.3 | 188.8 | | 1006 | 阿依古麗 || 100.4 | 158.9 | | 1007 | Jack || 100.4 | 198.7 | +------+----------+--------+-------+--------+ 10 rows in set (0.00 sec)

需求一----
按照score降序height升序------

mysql> select * from userinfo order by score desc,height asc; +------+----------+--------+-------+--------+ | id | name | gender | score | height | +------+----------+--------+-------+--------+ | 1005 | 古力娜華 || 145.6 | 166.7 | | 1002 | 李四 || 130.5 | 167.3 | | 1001 | 張三 || 128.8 | 173.4 | | 1009 | 李二狗 || 123.4 | 178.9 | | 1004 | 李六 || 123.4 | 180.4 | | 1010 | 王建國 || 120.9 | 166.4 | | 1003 | 王五 || 111.7 | 177.8 | | 1008 | Gavin || 111.3 | 188.8 | | 1006 | 阿依古麗 || 100.4 | 158.9 | | 1007 | Jack || 100.4 | 198.7 | +------+----------+--------+-------+--------+ 10 rows in set (0.00 sec)

需求2-------
按照性別分組,求出男女的平均身高,并要查看男女方所有人姓名;

分析----要求的是平均身高,所以選擇的主體目標是 select avg(height),然后再添加附加條件—

mysql> select avg(height) as '平均身高' ,group_concat(name) as '姓名' from userinfo group by gender; +-----------+------------------------------------+ | 平均身高 | 姓名 | +-----------+------------------------------------+ | 172.90000 | 李四,古力娜華,阿依古麗,Jack | | 177.61666 | 張三,王五,李六,Gavin,李二狗,王建國 | +-----------+------------------------------------+ 2 rows in set (0.00 sec)

需求3----
統計男女數量,并顯示出男女姓名

mysql> select gender ,count(gender) as '人數',group_concat(name) as '姓名' from userinfo group by gender; +--------+------+------------------------------------+ | gender | 人數 | 姓名 | +--------+------+------------------------------------+ || 4 | 李四,古力娜華,阿依古麗,Jack | || 6 | 張三,王五,李六,Gavin,李二狗,王建國 | +--------+------+------------------------------------+ 2 rows in set (0.00 sec)

查看字段的每條記錄名稱,可以在GROUP BY子句中使用GROUP_CONCAT()函數,將每個分組中各個字段的值顯示出來。

HAVING關鍵字與WHERE關鍵字都是用來過濾數據的,兩者有什么區別呢?其中重要的一點是,HAVING在數據分組之后進行過濾來選擇分組,而WHERE在分組之前來選擇記錄。另外,WHERE排除的記錄不再包括在分組中。

對于所得結果數據之查看部分-----

mysql> select * from userinfo limit 4,3; +------+----------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+-----------+ | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1006 | 阿依古麗 || 100.4 | 158.9 | mongo | | 1007 | Jack || 100.4 | 198.7 | banana | +------+----------+--------+-------+--------+-----------+ 3 rows in set (0.00 sec)mysql> select * from userinfo limit 4 offset 3; +------+----------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+-----------+ | 1004 | 李六 || 123.4 | 180.4 | apple | | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1006 | 阿依古麗 || 100.4 | 158.9 | mongo | | 1007 | Jack || 100.4 | 198.7 | banana | +------+----------+--------+-------+--------+-----------+ 4 rows in set (0.00 sec)

小結-----

查詢數據
1,查詢某寫字段下所有信息—
select 字段名1,字段名2,…字段名n from 表名;
2,查詢表中所有信息
select * from 表名;
3,限制查詢條件達到篩選目的—
select 字段名 from 表名 where 條件1 and/or 條件2

總體格式就是------
4,select 字段名 as 查詢字段的臨時字段名 from 表名 where 條件 group by 字段名 order by 字段名 limit 偏移量,記錄數量;

其中可以穿插各種函數;

MySQL聚合函數

MySQL聚合函數
COUNT()函數

COUNT()函數統計數據表中包含的記錄行的總數,或者根據查詢結果返回列中包含的數據行數。其使用方法有兩種:

**

● COUNT(*)計算表中總的行數,不管某列是否有數值或者為空值。
● COUNT(字段名)計算指定列下總的行數,計算時將忽略空值的行。


空值被COUNT(字段名)函數忽略;
而在COUNT()函數所有記錄都不忽略。

sum()函數再計算和的時候忽略null的行;

聯結查詢

將多張表連結起來以便于查詢數據,

內聯結查詢

傳統方式----where

將字段通過where進行篩選

mysql> select userinfo.id ,userinfo.name from userinfo where userinfo.id=usertest.id ; ERROR 1054 (42S22): Unknown column 'usertest.id' in 'where clause' mysql> select userinfo.id ,userinfo.name from userinfo,usertest where userinfo.id=usertest.id ; +------+----------+ | id | name | +------+----------+ | 1001 | 張三 | | 1003 | 王五 | | 1005 | 古力娜華 | | 1007 | Jack | | 1008 | Gavin | | 1009 | 李二狗 | | 1010 | 王建國 | | 1011 | 瑪麗亞 | +------+----------+ 8 rows in set (0.02 sec)

新方式-----inner join方式

mysql> select userinfo.id ,userinfo.name from userinfo inner join usertest on userinfo.id=usertest.id; +------+----------+ | id | name | +------+----------+ | 1001 | 張三 | | 1003 | 王五 | | 1005 | 古力娜華 | | 1007 | Jack | | 1008 | Gavin | | 1009 | 李二狗 | | 1010 | 王建國 | | 1011 | 瑪麗亞 | +------+----------+ 8 rows in set (0.00 sec)

內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作,并列出這些表中與連接條件相匹配的數據行,組合成新的記錄,也就是說,在內連接查詢中,只有滿足條件的記錄才能出現在結果關系中。

一般是建議使用內聯結,有些情況下使用where 操作可能會影響性能;

自聯結查詢

內聯結除了可以跟別的表進行之外還可以自己跟自己聯結------又叫自聯結查詢.

外聯結查詢

左聯結查詢

LEFT JOIN(左連接):返回包括左表中的所有記錄和右表中連接字段相等的記錄。

mysql> select userinfo.name,userinfo.fruitname from userinfo left join usertest on userinfo.name =usertest.name ; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 李四 | apple | | 王五 | pear | | 李六 | apple | | 古力娜華 | orange | | 阿依古麗 | mongo | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | NULL | | 穿耳戈 | NULL | +----------+-----------+ 12 rows in set (0.02 sec)ysql> select userinfo.name,userinfo.fruitname from userinfo left outer join usertest on userinfo.name =usertest.name ; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 李四 | apple | | 王五 | pear | | 李六 | apple | | 古力娜華 | orange | | 阿依古麗 | mongo | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | peak | | 穿耳戈 | peak | +----------+-----------+ 12 rows in set (0.02 sec)

left join 等同于left outer join----- 可以看作省略outer

右聯結查詢

RIGHT JOIN(右連接):返回包括右表中的所有記錄和左表中連接字段相等的記錄。

mysql> select userinfo.name,userinfo.fruitname from userinfo right join usertest on userinfo.name =usertest.name ; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 王五 | pear | | 古力娜華 | orange | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | NULL | | NULL | NULL | | 阿依古麗 | mongo | | 李六 | apple | +----------+-----------+ 11 rows in set (0.00 sec)mysql> select userinfo.name,userinfo.fruitname from userinfo right outer join usertest on userinfo.name =usertest.name ; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 王五 | pear | | 古力娜華 | orange | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | peak | | NULL | NULL | | 阿依古麗 | mongo | | 李六 | apple | +----------+-----------+ 11 rows in set (0.00 sec)

復合條件聯結查詢--------內聯結

就是再內聯結條件上進一步細化得到的查詢

mysql> select u1.name,u1.fruitname from userinfo as u1 inner join usertest as u2 on u1.id=u2.id ; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 王五 | pear | | 古力娜華 | orange | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | peak | +----------+-----------+ 8 rows in set (0.00 sec)mysql> select u1.name,u1.fruitname from userinfo as u1 inner join usertest as u2 on u1.id=u2.id and u1.id=1008; +-------+-----------+ | name | fruitname | +-------+-----------+ | Gavin | mongo | +-------+-----------+ 1 row in set (0.00 sec)

子查詢

子查詢很容易理解就是在查詢的基礎之前先進行一次條件篩選;
有子查詢時,先執行內層子查詢,再執行外層查詢,內層子查詢的結果作為外部查詢的比較條件。

mysql> select userinfo.name ,userinfo.score from userinfo where userinfo.name in(select name from usertest); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 王五 | 111.7 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | 阿依古麗 | 100.4 | | Jack | 100.4 | | Gavin | 111.3 | | 李二狗 | 123.4 | | 王建國 | 120.9 | | 瑪麗亞 | NULL | +----------+-------+ 10 rows in set (0.02 sec)

子查詢指一個查詢語句嵌套在另一個查詢語句內部的查詢,這個特性從MySQL 4.1開始引入。在SELECT子句中先計算子查詢,子查詢結果作為外層另一個查詢的過濾條件,查詢可以基于一個表或者多個表。子查詢中常用的操作符有ANY(SOME)、ALL、IN、EXISTS。子查詢可以添加到SELECT、UPDATE和DELETE語句中,而且可以進行多層嵌套。子查詢中也可以使用比較運算符,如**“<”“<=”“>”“>=”和“!=”**等。

帶some/any 與all的子查詢之間的區別

**原表數據-----** mysql> select * from user01; +--------+ | scores | +--------+ | 111 | | 112 | | 118 | | 120 | | 121 | | 108 | +--------+ 6 rows in set (0.00 sec)mysql> select * from userinfo; +------+----------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+-----------+ | 1001 | 張三 || 128.8 | 173.4 | pear | | 1002 | 李四 || 130.5 | 167.3 | apple | | 1003 | 王五 || 111.7 | 177.8 | pear | | 1004 | 李六 || 123.4 | 180.4 | apple | | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1006 | 阿依古麗 || 100.4 | 158.9 | mongo | | 1007 | Jack || 100.4 | 198.7 | banana | | 1008 | Gavin || 111.3 | 188.8 | mongo | | 1009 | 李二狗 || 123.4 | 178.9 | orange | | 1010 | 王建國 || 120.9 | 166.4 | banana | | 1011 | 瑪麗亞 || NULL | NULL | peak | | 1012 | 穿耳戈 || NULL | NULL | peak | +------+----------+--------+-------+--------+-----------+ 12 rows in set (0.00 sec) mysql> select name ,score from userinfo where score>any (select scores from user01); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 李四 | 130.5 | | 王五 | 111.7 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | Gavin | 111.3 | | 李二狗 | 123.4 | | 王建國 | 120.9 | +----------+-------+ 8 rows in set (0.02 sec)mysql> select name ,score from userinfo where score>some (select scores from user01); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 李四 | 130.5 | | 王五 | 111.7 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | Gavin | 111.3 | | 李二狗 | 123.4 | | 王建國 | 120.9 | +----------+-------+ 8 rows in set (0.00 sec) mysql> select name ,score from userinfo where score>all (select scores from user01); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 李四 | 130.5 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | 李二狗 | 123.4 | +----------+-------+ 5 rows in set (0.00 sec)

可以發現some和any的效果是一樣的;

select name ,score from userinfo where score>some (select scores from user01);
------some/any 表示 滿足其中的一個條件即可,即userinfo.score 的值大于user01.scores中的最小值就算滿足條件;

select name ,score from userinfo where score>all (select scores from user01);

------all表示滿足userinfo.score 的值大于user01.scores中的所有值,即要求userinfo.score 的值大于user01.scores中的最大值

帶(not) exists 的查詢

mysql> select name ,score from userinfo where exists(select score from userinfo where score=150); Empty set (0.02 sec)mysql> select name ,score from userinfo where exists(select score from userinfo where score=100.4); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 李四 | 130.5 | | 王五 | 111.7 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | 阿依古麗 | 100.4 | | Jack | 100.4 | | Gavin | 111.3 | | 李二狗 | 123.4 | | 王建國 | 120.9 | | 瑪麗亞 | NULL | | 穿耳戈 | NULL | +----------+-------+ 12 rows in set (0.00 sec)

可以發現exists的作用是如果exists后面的執行結果為true則執行前面的查詢,否則不執行;
即由于不存在score=150 的記錄結果為false,所以不執行查詢,存在score=100.4的記錄,結果為true所以執行查詢;

同理可以理解 not exsits ;

mysql> select name ,score from userinfo where not exists(select score from userinfo where score=150); +----------+-------+ | name | score | +----------+-------+ | 張三 | 128.8 | | 李四 | 130.5 | | 王五 | 111.7 | | 李六 | 123.4 | | 古力娜華 | 145.6 | | 阿依古麗 | 100.4 | | Jack | 100.4 | | Gavin | 111.3 | | 李二狗 | 123.4 | | 王建國 | 120.9 | | 瑪麗亞 | NULL | | 穿耳戈 | NULL | +----------+-------+ 12 rows in set (0.00 sec)

EXISTS和NOT EXISTS的結果只取決于是否會返回行,而不取決于這些行的內容,所以這個子查詢輸入列表通常是無關緊要的。

帶(not) in的查詢

mysql> select id, name ,fruitname from userinfo where id in(select id from usertest); +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1001 | 張三 | pear | | 1003 | 王五 | pear | | 1005 | 古力娜華 | orange | | 1007 | Jack | banana | | 1008 | Gavin | mongo | | 1009 | 李二狗 | orange | | 1010 | 王建國 | banana | | 1011 | 瑪麗亞 | peak | +------+----------+-----------+ 8 rows in set (0.00 sec)mysql> select id, name ,fruitname from userinfo where id in(1001,1002,1003,1004,1005); +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1001 | 張三 | pear | | 1002 | 李四 | apple | | 1003 | 王五 | pear | | 1004 | 李六 | apple | | 1005 | 古力娜華 | orange | +------+----------+-----------+ 5 rows in set (0.00 sec)

為了便于理解第二個做了一個簡單的查詢,只要id再in后面的這些數據中就篩選出來;

not in 跟in正好相反

mysql> select id, name ,fruitname from userinfo where id not in(select id from usertest); +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1002 | 李四 | apple | | 1004 | 李六 | apple | | 1006 | 阿依古麗 | mongo | | 1012 | 穿耳戈 | peak | +------+----------+-----------+ 4 rows in set (0.00 sec)

子查詢的功能也可以通過連接查詢完成,但是子查詢使得MySQL代碼更容易閱讀和編寫。

聯結查詢和子查詢的比較

用聯結查詢 完成 in 的 實現的效果-------

mysql> select u1.id,u1.name,u1.fruitname from userinfo as u1 inner join usertest as u2 on u1.id=u2.id; +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1001 | 張三 | pear | | 1003 | 王五 | pear | | 1005 | 古力娜華 | orange | | 1007 | Jack | banana | | 1008 | Gavin | mongo | | 1009 | 李二狗 | orange | | 1010 | 王建國 | banana | | 1011 | 瑪麗亞 | peak | +------+----------+-----------+ 8 rows in set (0.00 sec)select id, name ,fruitname from userinfo where id in(select id from usertest); +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1001 | 張三 | pear | | 1003 | 王五 | pear | | 1005 | 古力娜華 | orange | | 1007 | Jack | banana | | 1008 | Gavin | mongo | | 1009 | 李二狗 | orange | | 1010 | 王建國 | banana | | 1011 | 瑪麗亞 | peak | +------+----------+-----------+ 8 rows in set (0.00 sec)

帶比較運算符的子查詢

只做演示不做贅述…
比較符 “<”“<=”“=”“>=”和“!=”,’<=>'等等,

mysql> select id, name ,fruitname from userinfo where id not in(select id from usertest where length(name)<5); +------+----------+-----------+ | id | name | fruitname | +------+----------+-----------+ | 1001 | 張三 | pear | | 1002 | 李四 | apple | | 1003 | 王五 | pear | | 1004 | 李六 | apple | | 1005 | 古力娜華 | orange | | 1006 | 阿依古麗 | mongo | | 1008 | Gavin | mongo | | 1009 | 李二狗 | orange | | 1010 | 王建國 | banana | | 1011 | 瑪麗亞 | peak | | 1012 | 穿耳戈 | peak | +------+----------+-----------+ 11 rows in set (0.00 sec)mysql>

合并查詢

利用UNION關鍵字,可以給出多條SELECT語句,并將它們的結果組合成單個結果集。合并時,兩個表對應的列數和數據類型必須相同。

mysql> select name ,fruitname from userinfo union select name ,fruitname from usertest; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 李四 | apple | | 王五 | pear | | 李六 | apple | | 古力娜華 | orange | | 阿依古麗 | mongo | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | peak | | 穿耳戈 | peak | | Gavin | peak | | 李二狗 | mongo | | 王建國 | apple | | 瑪麗亞 | orange | | 韓非 | apple | +----------+-----------+ 17 rows in set (0.00 sec)mysql> select name ,fruitname from userinfo union all select name ,fruitname from usertest; +----------+-----------+ | name | fruitname | +----------+-----------+ | 張三 | pear | | 李四 | apple | | 王五 | pear | | 李六 | apple | | 古力娜華 | orange | | 阿依古麗 | mongo | | Jack | banana | | Gavin | mongo | | 李二狗 | orange | | 王建國 | banana | | 瑪麗亞 | peak | | 穿耳戈 | peak | | 張三 | pear | | 王五 | pear | | 古力娜華 | orange | | Jack | banana | | Gavin | peak | | 李二狗 | mongo | | 王建國 | apple | | 瑪麗亞 | orange | | 韓非 | apple | | 阿依古麗 | mongo | | 李六 | apple | +----------+-----------+ 23 rows in set (0.00 sec)

帶 all的union 與不帶的區別

由上述數據可以看到帶 all的union 與不帶的區別,不帶all的會將才能重復數據剔除,而帶all的則顯示所有數據;

用正則表達式查詢

正則表達式符號以及含義----

練習正則表達式-------
源數據表

mysql> select * from userinfo-> ; +------+----------+--------+-------+--------+---------------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+---------------+ | 1001 | 張三 || 128.8 | 173.4 | pear | | 1002 | 李四 || 130.5 | 167.3 | apple | | 1003 | 王五 || 111.7 | 177.8 | pear | | 1004 | 李六 || 123.4 | 180.4 | apple | | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1006 | 阿依古麗 || 100.4 | 158.9 | mongo | | 1007 | Jack || 100.4 | 198.7 | banana | | 1008 | Gavin || 111.3 | 188.8 | mongo | | 1009 | 李二狗 || 123.4 | 178.9 | orange | | 1010 | 王建國 || 120.9 | 166.4 | banana | | 1011 | 瑪麗亞 || NULL | NULL | peark | | 1012 | 穿耳戈 || NULL | NULL | peark | | 1013 | 張三12 || NULL | NULL | grape | | 1014 | 李四12 || NULL | NULL | pineaple | | 1015 | 王五12 || NULL | NULL | plum | | 1016 | 李六12 || NULL | NULL | grape | | 1017 | 古力娜12 || NULL | NULL | potato | | 1018 | 阿依古12 || NULL | NULL | carrot | | 1019 | jasdk || NULL | NULL | aubergine | | 1020 | Gavinqwe || NULL | NULL | cabbage | | 1021 | NULL || NULL | NULL | celery | | 1022 | NULL || NULL | NULL | white cabbage | | 1023 | NULL || NULL | NULL | lichee | | 1024 | NULL || NULL | NULL | lotus nut | +------+----------+--------+-------+--------+---------------+ 24 rows in set (0.00 sec)

1,匹配開始/結尾的字符

以a開頭的

mysql> select * from userinfo where fruitname regexp '^a'; +------+-------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+-------+--------+-------+--------+-----------+ | 1002 | 李四 || 130.5 | 167.3 | apple | | 1004 | 李六 || 123.4 | 180.4 | apple | | 1019 | jasdk || NULL | NULL | aubergine | +------+-------+--------+-------+--------+-----------+ 3 rows in set (0.00 sec)

以ge結尾的

mysql> select * from userinfo where fruitname regexp 'ge$'; +------+----------+--------+-------+--------+---------------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+---------------+ | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1009 | 李二狗 || 123.4 | 178.9 | orange | | 1020 | Gavinqwe || NULL | NULL | cabbage | | 1022 | NULL || NULL | NULL | white cabbage | +------+----------+--------+-------+--------+---------------+ 4 rows in set (0.00 sec)

匹配任一字符

mysql> select * from userinfo where fruitname regexp 'n.a'-> ; +------+--------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+--------+--------+-------+--------+-----------+ | 1014 | 李四12 || NULL | NULL | pineaple | +------+--------+--------+-------+--------+-----------+ 1 row in set (0.00 sec)

匹配多個字符

mysql> select * from userinfo where fruitname regexp 'ap+'; +------+--------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+--------+--------+-------+--------+-----------+ | 1002 | 李四 || 130.5 | 167.3 | apple | | 1004 | 李六 || 123.4 | 180.4 | apple | | 1013 | 張三12 || NULL | NULL | grape | | 1014 | 李四12 || NULL | NULL | pineaple | | 1016 | 李六12 || NULL | NULL | grape | +------+--------+--------+-------+--------+-----------+ 5 rows in set (0.00 sec)--匹配a緊跟其后至少有一個p--mysql> select * from userinfo where fruitname regexp '^ap+'; +------+------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+------+--------+-------+--------+-----------+ | 1002 | 李四 || 130.5 | 167.3 | apple | | 1004 | 李六 || 123.4 | 180.4 | apple | +------+------+--------+-------+--------+-----------+ 2 rows in set (0.00 sec)--匹配以a開頭緊跟其后至少有一個p--mysql> select * from userinfo where fruitname regexp 'a*k'; +------+--------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+--------+--------+-------+--------+-----------+ | 1011 | 瑪麗亞 || NULL | NULL | peark | | 1012 | 穿耳戈 || NULL | NULL | peark | +------+--------+--------+-------+--------+-----------+ 2 rows in set (0.00 sec)--匹配k前面有n個a(n最少為0)--

匹配字符串

多個字符串之間要用 | 間隔

mysql> select * from userinfo where fruitname regexp 'an|ap'; +------+----------+--------+-------+--------+-----------+ | id | name | gender | score | height | fruitname | +------+----------+--------+-------+--------+-----------+ | 1002 | 李四 || 130.5 | 167.3 | apple | | 1004 | 李六 || 123.4 | 180.4 | apple | | 1005 | 古力娜華 || 145.6 | 166.7 | orange | | 1007 | Jack || 100.4 | 198.7 | banana | | 1009 | 李二狗 || 123.4 | 178.9 | orange | | 1010 | 王建國 || 120.9 | 166.4 | banana | | 1013 | 張三12 || NULL | NULL | grape | | 1014 | 李四12 || NULL | NULL | pineaple | | 1016 | 李六12 || NULL | NULL | grape | +------+----------+--------+-------+--------+-----------+ 9 rows in set (0.00 sec)

總結

以上是生活随笔為你收集整理的mysql增删查改------插入与查询数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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