mysql基本操作

查询数据

SELECT 语法结构

SELECT (DISTINCT) column_name1, column_name2,.....,aggregate_function(column_name) FROM table_name ORDER BY  column_name1, column_name2,....(LIMIT 0,5);
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

过滤数据

值比较符号=、<>、 !=、<、<=、>、>=、IS [NOT] NULL

范围(BETWEEN AND), IN(范围, 范围) NOT IN(范围, 范围)

LIKE过滤

语法结构:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1;
模式 描述 示例
_ 表示任意单个字符。类似于正则表达式中的星号 "." 'a' //三位且中间字母是a的 <br />'a' //两位且结尾字母是a的 <br />'a' //两位且开头字母是a的
% 表示任意字符,类似于正则表达式中的星号 ""* '%a' //以a结尾的数据 <br />'a%' //以a开头的数据 <br />'%a%' //含有a的数据
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

示例:

SELECT prod_id, prod_name FROM products WHERE prod_name  LIKE 'jet%';  //搜索prod_name字段中包含jet字符串的所有数据

正则表达式过滤

模式 描述 示例
^ 匹配输入字符串的开始位置 查找name字段中以'st'为开头的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
$ 匹配输入字符串的结束位置 查找name字段中以'ok'为结尾的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
\ 匹配特殊字符。 查找name字段中包含.的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '\\.';
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 查找name字段包含:ak, ek,ik, ok, uk等所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '[aeiou]k';
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 <br />
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式。 查找name字段中以'ok'为结尾的所有数据:
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 <br />
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 <br />
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 <br />
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

示例:

SELECT prod_name FROM products WHERE prod_name REGXP '[1-5] Ton' ORDER BY prod_name;
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;

[NOT] EXISTS

判断子查询是否存在。语法结构:

SELECT column_name1, column_name2,... FROM table_name_1 WHERE [conditions] and [NOT] EXISTS (SELECT * FROM table_name_2 where [conditons]);

执行过程:
1、首先进行外层查询,在表table_name_1中查询满足条件的column1;
2、接下来进行内层查询,将满足条件的column1带入内层的表table_name_2中进行查询;
3、如果内层的表table_name_2满足查询条件,则返回true,该条数据保留;如果内层的表table_name_2不满足查询条件,则返回false,该条数据不保留;
4、最终将数据进行返回;
示例:

select * from student s where exists( select * from classinfo c where s.classid = c.classid);

函数

  • 拼接字段:Concat
  • 别名:AS, 会创建新的列
  • 算术计算:+,-,*,/
  • 文本处理函数:Ltrim(), RTrim(), Lower(), Upper(), Left(), Right(), - Length(),<br />日期和时间处理函数:Date(), Year(), Month(), Day(), Hour()
  • 汇总数据:AVG(), COUNT(), MAX(), MIN(), SUM() 忽略列值为NULL的行,可以加DISTINCT参数。

分组

GROUP BY语句根据一个或多个列对结果集进行分组,如果想要对分组的结果进一步过滤,可以使用HAVING。<br />语法结构:

SELECT column_name1, column_name2……,aggregate_function(column_name)
FROM table_name
[WHERE conditions]
GROUP BY column_name1,column_name2…… [HAVING conditions];

执行流程:<br />1.首先进行外层查询,根据WHERE条件过滤出数据;<br />2.对第一步所得数据按照GROUP BY后面跟的字段进行分组,分组顺序与字段顺序保持一致;<br />3.HAVING子句筛选满足第二条件的数据; 如果HAVING中有使用SELECT中聚合函数生成的字段,那等SELECT完之后再执行过滤;<br />4.执行SELECT, 返回指定的字段;

示例:

SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >= 50
ORDER BY ordertotal;

增删改数据

INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES(...);
UPDATE customers SET cust_name = 'The Fudds', cust_email = 'elmer@fudd.com' WHERE cust_id = 10005;
DELETE FROM  customers WHERE cust_id = 10006;

表定义操作

创建和删除表

SHOW DATABASES;                                        //显示数据库;
USE <数据库名>;                                         //使用数据库;
SHOW TABLES;                                           //显示库下面所有表;
DROP TABLE <表名>;                                      //删除表

ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];    //添加字段
ALTER TABLE <表名> DROP <字段名>;                       //删除字段
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;//修改字段定义
ALTER TABLE <表名> MODIFY <字段名> <新数据类型>;//修改字段定义, 跟CHANGE区别是不能重命名字段


参考:

1.几种MySQL中的联接查询操作方法总结Mysql脚本之家<br />http://www.jb51.net/article/64006.htm<br />3.第8篇 MySQL 多表连接查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容