• Mysql基础


    一、数据库操作

    创建数据库     create database name;

    查看所有数据库   show databases;

    删除数据库    drop database name;

    进入数据库    use name;

    二、表操作

    1.查看表 show tables;

    2.创建表 create table name(var1 int(4) [not null] [primary key],var2 char(10));

    3.查看表结构

    describe tablename;

    缩写 desc tablename;

     Field (列名),Type(字段类型),null(是否为空),key(主键),default(缺省/默认),extra(描述))

    4.删除表 drop table name;

    5.修改表结构

      #设置自增长 (只有主键能设置)

      alter table name change id id int(4) auto_increment;

      #改变字段属性

      alter table name change id id int(4);

      删除主键

      alter table name drop var primary key;

      增加主键

      alter table name change id id int(4) primary key;

      增加字段

      alter table name add class int(4) after id;

      删除字段

      alter table name drop name1,name2;

    三、数据库增删改查

    ---增

    insert into tablename(id,class,number) values(12,3,55); >>标准格式

    insert into tablename values(12,3,99);  >>值需要全部对应表字段可行

    insert into tablename values(12,3,99),(22,23,12);  >>值需要全部对应表字段可行

     ---查

    select name from table;

    select name from tablename order by  name [asc升序,desc降序];

    ---改

    ---查

    索引

    create index idx_name on table(name);

    where 条件语句

      where chinese=90;

      where class in (1,2,3);

      where class not in (1,2,3);

      where class !=4;

      where class between 1 and 3; 从1 到3

    ---计数函数

    select count(*) from score;  对所有字段统计计算行数,取最大值

    select count(name) from score;

    ---其他语句

    select distinct english from score; 去重

    select * from score limit 3,4; 从第4行开始,显示4行数据

    select * from score order by chinese desc limit 0,3;

    select class,count(*) from student group by class; 查询后分组 聚合函数

    后缀xx.xx 两个表有相同的字段时用来区别

    ---max()min() avg()sum()函数求最大最小值

    ---运算符+-*/

    select maths,maths+5 from score;

    ---连接查询

    左连接left join on(以左边的表为主,右边的表没有数据就为空)

    select xx,xx.xx,xx from table1,table2 table1 left join table2 on xx.id=xx.id;

    select stu.*,ach.* from stu left join ach on stu.id=ach.id;

    右连接(以右边的表为主,左边的表没有数据就为空)

    select xx,xx.xx,xx from table1,table2 table1 right join table2 on xx.id=xx.id;

    内连接inner join(展示两个表中共有的记录)

    select stu.*,sc.*,maths+sc.chinese+sc.english total from student stu join score sc on stu.id=sc.id;

    外连接()

    -

    数据去重

      将两张表数据合并到一起去重

      select id,name,class from student union select class,number,maths from score;

      单张表数据

      select distinct name from (select name from fuck where fs>80) t(必须给表一个aliasb别名);

         找出重复的数据

      select * from fuck where name in(select name from fuck group by name having count(*)>1);(一个字段)

      select * from fuck where (name,km,fs) in (select name,km,fs from fuck group by name,km,fs having count(*)>1);

    所有语句

      select distinct sum() from join on where group by having order by limit;

     多表查询

      select table1.xx table2.xx from table1,table2 where table1.id=table2.id;

      delete stu.*,ach.* from stu,ach where stu.id=ach.id and name='hohn';(多表删除)

    执行顺序

      from > join on >where >group by>sum()>having>select>distinct>order by>limit 

    查询每门成绩

    select co_name ,avg(sc_score) avg from score,course where score.couresid=course.co_id group by co_name order avg;

    select co_name,avg from (select sc_courseid,avg(sc_source) avg from score group by sc_courseid) t1,course t2 where t1.sc_courseid =t2.co_id order by avg;

    每门成绩大于80的学生

    1.select name from fuck group by name having min(fs)>80;

    2.select distinct name from fuck where name not in (select name from fuck where fs<80);

    查询每个科目的最高分的学生信息

    select * from student where id in (select t1.stu_id from score t1,(select c_name,max(grade) as grade from score group by c_name) t2 where t1.c_name=t2.c_name and t1.grade=t2.grade);

    select student.* from student,(select score.* from score,(select max(grade) grade,c_name from score group by c_name) t1 where

                                  ------------------------最大成绩,名称-----------------------

    score.c_name=t1.c_name and score.grade=t1.grade) t2 where student.id=t2.stu_id;

    每个部门年龄最大员工信息
    select t2.name,dept.d_name from dept,(select emp.name,emp.d_id from emp,(select d_id,max(age) max from emp group by d_id) t1 where emp.d_id=t1.d_id and emp.age=t1.max) t2 where t2.d_id=dept.d_id;

    每个部门总收入
    select d_name,t1.sum from dept,(select d_id,sum(salary) sum from emp group by d_id)t1 where t1.d_id=dept.d_id;
    部门收入大于8000
    select dept.*,sum from dept,(select d_id,sum(salary) sum from emp group by d_id)t1 where t1.d_id=dept.d_id and sum>8000;

    哪个部门没有员工入


    每门成绩大于80的学生
    select name from fuck group by name having min(fs)>80;
    select distinct name from fuck where name not in (select name from fuck where fs<80);


    select id,name,age,time,salary,d_id,row_nunmber() over(partition by d_id order by age desc) rn from emp;(分组最大值函数)
    +------+------------+ +----+------+-----+ +----+--------+
    | name | department | | id | name | sex | | id | salary |
    +------+------------+ +----+------+-----+
    | 孙七 | 开发 | | 1 | 张三 | 女 | | 1 | 1000 |
    | 王五 | 测试 | | 3 | 王五 | 男 | | 2 | 2000 |
    | 赵六 | 测试 | | 4 | 赵六 | 男 | | 3 | 2000 |
    | 李四 | 开发 | | 5 | 孙七 | 女 | | 4 | 3000 |
    | 5 | 5000 |

    查处每个部门及部门平均工资由高到低排序;

    select distinct department,avg(salary) from (select department,t1.salary from department,(select employee.name,salary.salary from employee left join salary on employee.id=salary.id) t1 where department.name=t1.name) t2 group by department order by avg(salary) desc;


    select distinct t2.department,avg(salary) avg from department,(select department,salary from department,(select name,salary from employee,salary where employee.id=salary.id) t1 where department.name=t1.name) t2 group by t2.department order by avg desc;

    select department,avg(salary) from department,employee,salary where department.name=employee.name and employee.id=salary.id group by department order by avg(salary) desc;


    查询部门工资最高员工姓名(先连接三张表求出部门和最高工资,在连接四章表求出id)
    select department.name,max.salary
    from department,employee,salary,(select department,max(salary) salary
    from department,employee,salary where department.name=employee.name and employee.id=salary.id group by department) max
    where department.name=employee.name and employee.id=salary.id and max.salary=salary.salary and department.department=max.department;


    select * from tb_student where sno in (select sno from tb_score where grade>(select avg(degree) from tb_score));

    select * from tb_student where sno in (select sno from tb_score,(select avg(degree) a from tb_score) avg where avg.a<degree);

    只是补充:

    like %匹配任意个字符   _ 匹配单个字符

    concat() 连接函数  构造可以变化的

    concat(name,'_%')

    Monaco-Ville"是合併國家名字 "Monaco" 和延伸詞"-Ville".

    顯示國家名字,及其延伸詞,如首都是國家名字的延伸。

    你可以使用SQL函數 REPLACE 或 MID.

    select name,replace(capital,name,'')as ext
    from world
    where capital like concat(name,'_%')

    Show the name and the continent - but substitute Eurasia for Europe and Asia; substitute America - for each country in North America or South America or Caribbean. Show countries beginning with A or B

    select name,
    CASE WHEN continent='Europe' OR continent='Asia' THEN 'Eurasia'
    ELSE 'America' END
    from world
    where name like 'A%' or name like 'B%'
    order by name

    Keep going
  • 相关阅读:
    五、Java对象和类
    四、JavaString字符串
    三、Java语句
    二、Java基本数据类型
    一、Java主类结构
    bat常用命令
    iOS 如何获得app的版本和系统的版本
    英语----时态---将来时态的四种对比
    英语----时态---将来时态的
    英语----时态---现在进行时与过去进行时
  • 原文地址:https://www.cnblogs.com/maoxianfei/p/5740466.html
Copyright © 2020-2023  润新知