sql笔记

sql语句是数据库很重要的一部分,这篇文章主要记录了一些基本的sql语法,包括对数据库的操作、对表的增删改查、以及数据约束和多表查询等。

一、数据库管理

  1. 查询所有数据库
    show databases;
  2. 创建数据库
    create database test;
  3. 查看数据库的默认字符集
    show create database test;
  4. 删除数据库
    drop database test;
  5. 修改数据库默认字符集
    alter database test default character set utf8;

二、表管理

  1. 查看所有表
    show tables;
  2. 创建表
    create table student(id int,name varchar(20),age int);
  3. 查看表结构
    desc student;
  4. 删除表
    drop table student;
  5. 修改表
    • 添加字段
      alter table student add column gender varchar(10);
    • 删除字段
      alter table student drop column gender;
    • 修改字段类型
      alter table student modify column age varchar(10);
    • 修改字段名称
      alter table student change column name sname varchar(20);
    • 修改表名称
      alter table student rename to teacher;
  6. 增删改数据
    • 增加数据
      • 插入所有字段
        insert into student values(1,'devbird',10);
      • 插入部分字段
        insert into student(id,name) values(2,'dawu')
    • 修改数据
      update student set age=20,gender='男' where id=1;
    • 删除数据
      • 带条件的删除
        delete from student where id=2;
    • 删除所有数据
      • 方式一:delete from student;
      • 方式二:truncate table student;
      • 两种方式区别:
        • delete from: ①可以带条件删除;②只能删除表的数据,不能删除表的约束;③使用delete from删除的数据可以回滚(事务)。
        • truncate table:①不能带条件删除;②既可以删除表的数据,也可以删除表的约束;③使用truncate table删除的数据不能回滚(事务)。
  7. 查询数据
    • 查询所有列
      select * from student;

    • 查询指定列
      select id,name from student;

    • 查询时添加常量列class
      select id,name,'class' from student;

    • 查询时合并列
      select id name,(math+english) as '总成绩' from student;

    • 查询时去除重复记录
      select distinct gender from student;

    • 条件查询

      • 逻辑条件: and(与) or(或)
        • select * from student where id=1 and name='devbird';
        • select * from student where id=1 or name='devbird';
      • 比较条件:>, <, >=, <=, =, <>(不等于), between A and B(等价于>=A 且<=B)
        • select * from student where math>60;
        • select * from student where math>=60 and math<=90;
        • select * from student where math between 60 and 90;
        • select * from student where age<>20;
      • 判空条件:is null, is not null, ='', <>''
        • select * from student where address is null;
        • select * from student where address='';
      • 模糊条件:like
        • %:表示任意个字符;
        • _:表示一个字符;
        • 查询姓李的学生:select * from student where name like '李%';
        • 查询姓李且名字只有两个字的学生:select * from student where name like '李_';
    • 聚合查询
      -常用的聚合函数:sum(), max(), min(), avg(), count()

      • 查询学生math的总成绩:select sum(math) as '数学总成绩' from student;
      • 查询math最高分:select max(math) as '最高分' from student;
      • 查询math最低分:select min(math) as '最低分' from student;
      • 查询math平均分:select avg(math) as '数学平均分' from student;
      • 统计有多少学生:select count(*) from student;
    • 分页查询

      • 分页: limit 其实行,查询几行
      • 分页查询当前页数据的sql:select * from student limit (当前页-1)*每页显示多少条,每页显示多少条;
    • 查询排序

      • 语法:order by 字段 asc/desc (asc:升序;desc:降序)
      • select * from student order by math asc;
      • select * from student order by math desc;
    • 分组查询

      • 按性别分组:select * from student group by gender;
      • 统计每组的人数:select gender,count(*) from student group by gender;
    • 分组查询后筛选
      -查询总人数大于二的性别:select gender,count(*) from student group by gender having count(*)>2;


三、数据约束

  1. 默认值
    create table student(id int,name varchar(20),address varchar(30) default '重庆');
  2. 非空
    create table student(id int,name varchar(20),gender varchar(10) not null);
  3. 唯一
    create table student(id int unique,name varchar(20));
  4. 主键
    create table student(id int primary key,name varchar(20));
  5. 自增长
    create table student(id int primary key auto_increment,name varchar(20));
  6. 外键
    • 主表:create table dept(id int primary key,deptName varchar(20));
    • 副表:create table employee(id int primary key,empName varchar(20),deptId int,constraint employee_dept_fk foreign key(deptId) references dept(id));
    • 当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据。
    • 当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据。
    • 当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据。
  7. 级联操作
    • 级联修改: ON UPDATE CASCADE
    • 级联删除: ON DELETE CASCADE
    • 主表:create table dept(id int primary key,deptName varchar(20));
    • 副表:create table employee(id int primary key,empName varchar(20),deptId int,constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade);

四、多表查询

  • 内连接查询
    • 方式一:select empName,deptName from employee,dept where employee.deptId=dept.id;
    • 方式二:select empName,deptName from employee inner join dept on employee.deptId=dept.id;
    • 使用别名:SELECT e.empName,d.deptName FROM employee e INNER JOIN dept d ON e.deptId=d.id;
  • 左[外]连接查询
    • SELECT d.deptName,e.empName FROM dept d LEFT OUTER JOIN employee e ON d.id=e.deptId;
    • 用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null,左外连接:左表的数据一定会完成显示!
  • 右[外]连接查询
    • SELECT d.deptName,e.empName FROM employee e FROM employee e RIGHT OUTER JOIN dept d ON d.id=e.deptId;
    • 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null,右外连接:右表的数据一定会完成显示!
  • 自连接查询
    • SELECT e.empName,b.empName FROM employee e LEFT OUTER JOIN employee b ON e.bossId=b.id;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 一.数据库 1.创建数据库create database [if not exists] db_name [cha...
    PASSssss阅读 475评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,785评论 0 11
  • 四.约束 1.创建表时指定约束: create table tb( id int primary key auto...
    PASSssss阅读 230评论 0 0
  • 1.操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name ...
    newdolphintime阅读 770评论 0 1