关于mysql查询语句基础SQL

直奔主题;
以下内容是我自己总结,如果有不对的地方还请各位朋友指点,感激不尽。
基础数据类型就不再次一一赘述,各位想了解的朋友可以自行百度。

1.mysql下的用户创建与用户权限问题。

    CREATE USER ["username"]IDENTIFIED BY ["password"];

    2)用户的授权与撤销权限
    默认建立的用户都是可以在非本机上登陆mysql服务器的

    grant [create|select|insert|drop....] on mydb.* to user 'username'; // 授权指定权限
    grant all on mydb.* to user 'username';//授予全部权限


    revoke all on mydb.* from 'username';//撤销全部权限
/*我在实践的时候发现不管是在授权还是撤销的时候都需要指定数据库,不知道这一点是不是绝对的*/
2查询语句 我上传了关于查询测试的SQL脚本,需要的朋友可以下载
1)前提准备

/*创建部门表*/
CREATE TABLE dept(
    deptno      INT     PRIMARY KEY,
    dname       VARCHAR(50),
    loc         VARCHAR(50)
);

/*创建雇员表*/
CREATE TABLE emp(
    empno       INT     PRIMARY KEY,
    ename       VARCHAR(50),
    job     VARCHAR(50),
    mgr     INT,
    hiredate    DATE,
    sal     DECIMAL(7,2),
    COMM        DECIMAL(7,2),
    deptno      INT,
    CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno)
);

/*创建工资等级表*/
CREATE TABLE salgrade(
    grade       INT     PRIMARY KEY,
    losal       INT,
    hisal       INT
);

/*创建学生表*/
CREATE TABLE stu(
    sid     INT     PRIMARY KEY,
    sname       VARCHAR(50),
    age     INT,
    gander      VARCHAR(10),
    province    VARCHAR(50),
    tuition     INT
);
2)基础查询
    1->查询全部列

    select * from stu;

    2->查询指定列

    select [sid|sname|...] from stu;
3)条件查询

    1->查询性别为女,并且[******ALL 关键字]年龄50的记录

    select * from stu where gender = 'fe' and age = 50;

    2->查询学号为S_1001,或者[******OR 关键字]姓名为liSi的记录

    select * from stu where sid = 's_1001' or sname = 'lisi'l;

    3->查询学号为S_1001,S_1002,S_1003的记录[******IN 关键字]

    select * from stu where sid in ('s_1001','s_1002','s_10013);

    4->查询学号不是S_1001,S_1002,S_1003的记录[******NOT IN 关键字]

    select * from stu where sid not in ('s_1001','s_1002','s_10013);

    5->查询年龄为NULL的记录[******IS NULL 关键字]

    select * from stu where age is NULL;

    6->查询年龄在2040之间的学生记录[*******BETWEEN minValue AND minValue BETWEEN.. AND ..关键字]

    select * from stu where age between 20 and 40;
    也可 select * from stu where age < 40 and age >20

    7->查询性别非男的学生记录['<>','!=','NOT']
    select * from stu where gender <> 'ma';

    select * from stu where gender != 'ma';

    select * from stu where not gender = 'ma';

    8->查询姓名不为NULL的学生记录[IS NOT NULL 关键字]

    select * from stu where sname is not null;

4) 模糊查询
    1->查询姓名由5个字母构成的学生记录 “_”匹配任意一个字母(也可匹配汉字)

    select * from stu where sname like '_____';

    2->查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

    select * from stu where sname like '____i';

    3->查询姓名以“z”开头的学生记录 .,“%”匹配0~n个任何字母(也可匹配汉字)。

    select * from stu where sname like 'z%';

    4->查询姓名中第2个字母为“i”的学生记录

    select * from stu where sname like '_i%';

    5->查询姓名中包含“a”字母的学生记录

    select * from stu where sname like '%a%';

5)字段控制查询
    1->去除重复记录,使用DISTINCT关键字

    select distinct from emp;

    2->查看雇员的月薪与佣金之和

这里写代码片
HttpServletRequest reqeust = ServletActionContext.getRequest();

        如果sal 或 comm 其中任意一个或多个字段类型为非数值型,该语句报错
        select sal + comm from emp;

        3->给列名添加别名 [AS 关键字]

        select sal as '薪水' from emp;

    6)排序字段[ORDER BY 关键字]

        1->查询所有学生记录,按年龄升序排序(默认为升序 asc)

        select * from stu order by age asc;

        2->查询所有学生记录,按年龄降序排序(desc)

        select * from stu order by age desc;

        3->查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

        select * from emp order by sal asc, empno desc;

    7)聚合函数
        聚合函数是用来做纵向运算的函数:
       COUNT():统计指定列不为NULL的记录行数;
       MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
       MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
       SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
       AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为01->查询emp表中月薪大于2500的人数:

        select count(*) from emp where sal > 2500;

        2->统计月薪与佣金之和大于2500元的人数:

        select count(*) from emp where (sal + ifnull(comm,0)) > 2500;

        3->查询有佣金的人数,以及有领导的人数:

        select count(comm) '有佣金人数', count(mgr) '有领导人数' from emp;

    4->SUM和AVG
        查询所有雇员月薪和:

        select sum(sal) from emp;

        查询所有雇员月薪+佣金和:

        select SUM(IFNULL(sal,0) + IFNULL(comm,0)) '钱' FROM emp;

        统计所有员工平均工资:

        select avg(sal) from emp;

    5->max和min

        统计最少薪水和最大薪水

        select max(sal), min(sal) from emp;

    6->分组查询【group by 关键字】

        查询每个部门的部门编号和每个部门的工资和:

        SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;


        查询每个部门的部门编号以及每个部门的人数:

        select deptno,count(*) from emp;

    7-> HAVING子句[后面可跟聚集函数做条件查询]

        查询工资总和大于9000的部门编号以及工资和:

        select deptno,sum(sal) from emp having sum(sal) > 9000;

    8-> LIMIT
        LIMIT用来限定查询结果的起始行,以及总行数。

以上是MYSQL基础查询语句,如果有不对的地方,希望各位朋友们指出来,谢谢。后期还会有涉及到存储过程,函数游标,关系查询,关系查询优化,并发控制等等一系列博客更新,以及oracle,java,javaweb,android相关知识。

你可能感兴趣的:(mysql数据库)