SQL (Structure Query Language) 基础

SQL 语句主要分为 3 类

DDL (Data Definition Language) 语句:数据定义语句,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象

DML (Data Manipulation Language) 语句:数据操纵语句,用于添加,删除,更新和查询数据库记录,并检查数据完整性

DCL (Data Control Language) 语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库,表,字段,用户的访问权限和安全级别

DDL 语句

  1. 创建数据库

    连接数据库
    mysql -u root -p
    

    mysql 代表客户端命令
    -u 后面跟连接的数据库用户
    -p 表示需要输入密码

     create DATABASE dbname;    
    
    查看数据库
    show databases;
    
    选择要操作的数据库
    use dbname;
    
    查看数据库的表
    show tables;
    
  2. 删除数据库

      drop database dbname;
    
  3. 创建表

     create table tablename(
         column_name1 column_type1 constraints,
         ...     
         column_name_n column_type_n constraints);
    

    column_name 是列的名字
    column_type 是列的类型
    constraints 是这个列的约束条件

    查看表的定义
    desc tablename;
    
    查看更全面的表的定义
    show create table tablename;
    
  4. 删除表

     drop table tablename;
    
  5. 修改表

    修改表的类型
    ALTER TABLE tablename MODIFY [COLUMN] col_name column_definition [first | after col_name];
    
    增加表字段
    ALTER TABLE tablename ADD [COLUMN] col_name column_definition [first | after col_name];
    
    删除表字段
    ALTER TABLE tablename DROP [COLUMN] col_name;
    
    字段改名,同时修改字段类型
    ALTER TABLE tablename CHANGE [COLUMN] old_col_name new_col_name column_definition [first | after col_name];
    
    修改字段排列顺序

    前面介绍的的字段增加和修改语法(ADD/CNAHGE/MODIFY)中,都有一个可选项 first|after col_name,这个选项可以用来修改字段在表中的位置,默认 ADD 增加的新字段是加在表的最后位置,而 CHANGE/MODIFY 默认都不会改变字段的位置

    表改名
    ALTER TABLE tablename RENAME [TO] new_tablename;
    

DML 语句

  1. 插入记录

     INSERT INTO tablename [(field1,field2,……fieldn)] VALUES(value1,value2,……valuesn)[,(value1,value2,......valuesn)]*;
    

    对于含可空字段、非空但是含有默认值的字段、自增字段,可以不用在 insert 后的字段列表里面出现,values 后面只写对应字段名称的 value,这些没写的字段可以自动设置为 NULL、
    默认值、自增的下一个数字,这样在某些情况下可以大大缩短 SQL 语句的复杂性。

    也可显示的插入特定的值,设置为可空的字段都显示为 NULL

    insert into tablename (field1,field3) values(value1,value3);
    
  2. 更新记录

     UPDATE tablename SET field1=value1,field2=value2,……fieldn=valuen [WHERE CONDITION];
    
    同时更新多个表中数据
    UPDATE t1 [a],t2 [b] set a.field1=expr1,b.field2=expr2 [WHERE CONDITION];// a 和 b 是 t1 和 t2 这两个表的别名
    
  3. 删除记录

     DELETE FROM tablename [WHERE CONDITION];
    
    一次删除多个表的数据
    DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION]
    

    如果 from 后面的表名用别名,则 delete 后面的也要用相应的别名,否则会提示语法错误

  4. 查询记录

     SELECT * FROM tablename [WHERE CONDITION];// * 表示要将所有的记录都选出来,也可以用逗号分割的所有字段来代替
    
    查询不重复的记录

    有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现

    select distinct colname1,colname2 from tablename;
    
    条件查询

    在很多情况下,用户并不需要查询所有的记录,而只是需要根据限定条件来查询一部分数据,用 where 关键字可以实现

    排序和限制
    SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]]
    

    其中,DESC(descending order) 和 ASC(ascending order) 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序排列,如果不写此关键字默认是升序排列。ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序。如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推。如果只有一个排序字段,则这些字段相同的记录将会无序排列

    对于排序后的记录,如果希望只显示一部分,而不是全部,这时,就可以使用 LIMIT 关键字

    SELECT ……[LIMIT offset_start,row_count]
    

    其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。在默认情况下,起始偏移量为 0,只需要写记录行数就可以,这时候,显示的实际就是前 n 条记录

    聚合
    SELECT [field1,field2,……fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,……fieldn [WITH ROLLUP]] [HAVING where_contition];
    

    fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)

    GROUP BY 关键字表示要进行分类聚合的字段

    WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总

    HAVING 关键字表示对分类后的结果再进行条件的过滤

    注意:having 和 where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤

    表连接

    表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

    我们最常用的是内连接

    select ename,deptname from emp,dept where emp.deptno=dept.deptno;
    

    外连接有分为左连接和右连接

    左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

    select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
    

    右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。右连接和左连接类似,两者之间可以互相转化。

    select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
    
    子查询

    某些情况下,当我们查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。用于子查询的关键字主要包括 in、not in、=、!=、exists、not exists 等

    select * from emp where deptno in(select deptno from dept);
    
    记录联合

    我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候就需要用 unionunion all 关键字来实现这样的功能

    SELECT * FROM t1 UNION|UNION ALL SELECT * FROM t2;
    

    UNION 和 UNION ALL 的主要区别是 UNION ALL 是把结果集直接合并在一起,而 UNION 是将UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果

DCL 语句

grant 和 revoke

帮助的使用

  1. 如果不知道帮助能够提供些什么,可以用 ? contents 命令来显示所有可供查询的的分类
  2. 对于列出的分类,可以使用 ? 类别名称 的方式针对用户感兴趣的内容做进一步的查看
  3. 在实际应用当中,如果需要快速查阅某项语法时,可以使用关键字进行快速查询

    例如,想知道 show 命令都能看些什么东西,可以用 ? show 命令

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

推荐阅读更多精彩内容