SQL 语句总结 & MYSQL 常用数据类型

  最近在处理一个餐厅内部排队叫号系统,在 Android 端使用 JDBC 连接操作 MySQL 的业务逻辑一大堆。这里就当回顾下整理以前学的 SQL语句好了

MYSQL 常用数据类型

文本:
CHAR(*):最多255个字节的定长字符串,它的长度必须在创建时指定

VARCHAR(*):最多255个字节的可变长度字符串,它的长度必须在创建时指定

TEXT:最大长度为64K字符的变长文本

TINYTEXT:最大长度为255字符的变长文本

MEDUIMTEXT:最大长度为16K字符的变长文本

LONGTEXT:最大长度为4GB字符的变长文本
整数(考虑数据取值后选择尽可能小的类型)
tinyint:1字节。有符号值:-128 到127;无符号值:0到255

smallint:2字节。有符号值:-32768 到32767;无符号值:0到65535

mediumint:3字节。

int:4字节

bigint:8字节

小数(需要指定长度和小数点,也就是显示宽度和小数位数):
decimal:精确存储的小数,在内部用字符串存储,适合金额等要求精确的类型。别名:NUMERIC

float:4字节,单精度。会近似存储(*),效率比decimal高。

double:8字节,双精度。会近似存储(*),效率比decimal高。

日期时间:
DATE:4字节。范围:1000-01-01——9999-12-31

TIME:3字节。范围:-838:59:59——838:59:59

DATETIME:8字节。范围:1000-01-01 00:00:00——9999-12-31 23:59:59
二进制大数据:
TITYBLOB:最大长度为255字节

BLOB:最大长度为64KB

MEDIUMBLOB:最大长度为16MB

LONGBLOB:最大长度为4GB

SQL 语法

 Select * from 表  查询某张表的全部内容 
 Insert into 表(表字段)values(对应的值) 插入新数据 
Update 数据更新
        1、更新一个列:UPDATE T_Persons Set Age=30

        2、更新多个列: UPDATE T_Persons Set Age=30,Name='tom'

        3、表达式:UPDATE T_Persons Set Age=Age+1

        4、更新一部分数据: UPDATE T_Persons Set Age=30 where Name='tom',用where语句表示只更新Name是'tom'的行,注意SQL中等于判断用单      个=,而不是==。

        5、Where中还可以使用复杂的逻辑判断UPDATE T_Persons Set Age=30 where Name='tom' or Age<25,or相当于Java中的||

        where (Age>20 and Age<30) or(Age=80)

        6、Where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)等
删除数据
   删除表中全部数据:DELETE FROM T_Persons。

   Delete 也可以带 where 子句来删除一部分数据:DELETE FROM T_Persons WHERE Age > 20

   Delete 只是删除数据,表还在。(*)Drop table T_Persons
数据的检索

就是根据 where 条件获取到想要获取到的字段数据
语法:

    1、简单的数据检索 :SELECT * FROM T_Employees

    2、只检索需要的列 :SELECT Number FROM T_Employees 、SELECT Name,Age FROM T_Employees

    3、列别名:SELECT Number AS 编号,Name AS 姓名,Age AS Age111 FROM T_Employees  写不写AS都行

    4、计算列:SELECT Number 编号,Name 姓名,Age Age111,Age+10 十年后的年龄,1+1,now() FROM T_Employees

    5、使用where检索符合条件的数据:SELECT Name FROM T_Employees WHERE Salary<5000。故事:新员工的数据检索噩梦

    6、还可以检索不与任何表关联的数据:select 1+1;select now();
聚合函数
    1、SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量)

    2、大于25岁的员工的最高工资 :SELECT MAX(Salary) FROM T_Employees WHERE Age>25 

    3、最低工资和最高工资:SELECT MIN(Salary),MAX(Salary) FROM  T_Employees

    4、大于25岁的员工人数:SELECT COUNT(*) FROM  T_Employees  WHERE Age>25 

    5、全体员工的工资总和平均工资:SELECT SUM(Salary),AVG (Salary) FROM  T_Employee
升序降序
    1、ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从    大到小排列,DESC) 

    2、按照年龄升序排序所有员工信息的列表:SELECT * FROM  T_Employees ORDER BY Age ASC 

    3、按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序 :SELECT * FROM  T_Employees ORDER BY Age DESC,Salary DESC

    4、RDER BY子句要放到WHERE子句之后 :SELECT * FROM T_Employees WHERE Age>23 ORDER BY Age DESC,Salary DESC 
通配符过滤使用 LIKE 。
    1、单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符。以任意字符开头,剩余部分为“erry” :SELECT * FROM T_Employees WHERE        Name LIKE '_erry' 

    2、多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。 “k%”匹配以“k”开头、任意长度的字符串。检索姓        名中包含字母“n”的员工信息 :SELECT * FROM T_Employees WHERE Name LIKE '%n%' 

    3、Like性能较差,很容易造成全表扫描,谨慎使用。后面会讲数据库优化(索引等),项目中做搜索用全文检索。
数据库空值处理
    数据库中,一个列如果没有指定值,那么值就位null 表示"不知道",而不是没有

    SQL中使用is null、is not null来进行空值判断: 

    select * from 表 where Name is null     为空

    select * from 表 where Name is not null 不为空
limit 返回结果集
    1、LIMIT关键字用来限制返回的结果集, LIMIT放在SELECT语句的最后位置,语法为“LIMIT  首行行号,要返回的结果集的最大数目” 。比如下面      
    SQL语句将返回Name不为空的、按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:

    SELECT * FROM T_Employees
    where Name is not null 
    ORDER BY Salary DESC  
    LIMIT 2,5 

    2、limit一定要放到所有的语句的最后
group by 分组查询
    1、数据分组用来将数据分为多个逻辑组,从而可以对每个组进行聚合运算。SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY  分组字        段”。分组语句一般和聚合函数一起使用,GROUP BY子句负责将数据分成逻辑组,而聚合函数则对每一个组进行统计计算。AVG Min MAX
left join 联合查询
     /*查询每张订单的订单号、价格、对应的客户姓名以及客户年龄*/
    select o.Id 订单号,o.Price 价格,c.Name 姓名, c.Age 年龄
    from T_Orders o
    left join T_Customers c
    on o.CustomerId=c.Id
    /*添加where语句(显示价格>=150元的订单)*/
    where Price>=150
外键约束

  外键 (FK) 是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。 在外键引用中,当包含一个表的主 键值的一个或多个列被另一个表中的一个或多个列引用时,就在这两个表之间创建了链接。 这个列就成为第二个表的外键

1、如果删除/更新T_Customers一行记录,那么就可能会导致T_Orders中存在CustomerId为非法值的数据,使得程序逻辑错误。一般不会更新主键Id的值,所以谈外键约束的时候只谈“删除T_Customers时”。

2、外键约束:当删除T_Customers中一条数据的时候,如何处理T_Orders等存在指向T_Customers外键的行。外键约束建立在外键字段***Id的表上(t_orders)。

3、建外键约束的方法:新建或者修改表的时候“外键”→“添加外键”。名:自动命名即可;栏位名:CustomerId;参考表:t_customers;外栏位名:Id;删除时、更新时:一般默认RESTRICT(CASCADE:删除T_Customers一行时把它的订单也删除了;SET NULL:删除T_Customers一行时把它的订单CustomerId设置为NULL;NO ACTION/RESTRICT:拒绝删除)。

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

推荐阅读更多精彩内容