MySql数据库(三)

DQL 基础查询

        DQL( Data Query Language )数据查询语言查询是使用频率最高的一个操作,
可以从一个表中查询数据,也可以从多个表中查询数据。

        select 查询列表 from 表名;

        查询列表可以是:表中的字段、常量、表达式、函数;
        
        查询常量值 SELECT 100;
        查询表达式:select 100*98;
        查询函数:select 函数 ; / 例如 version()
        特定列查询:select column1,column2 from table
        全部列查询: select * from table
        排除重复行: select distinct column1,column2 from table

(1)单行函数

        ①字符函数          

                length():获取参数值的字节个数;
                char_length()获取参数值的字符个数;
                concat(str1,str2,.....):拼接字符串;
                upper()/lower():将字符串变成大写/ 小写;
                substring(str,pos,length):截取字符串 位置从1 开始;
                instr(str,指定字符) :返回子串第一次出现的索引,如果找不到返回 0;
                trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串 );
                lpad(str,length,填充字符) :用指定的字符实现左填充将 str 填充为指定长度;
                rpad(str,length,填充字符) :用指定的字符实现右填充将 str 填充为指定长度;
                replace(str,old,new):替换,替换所有的子串;

        ②逻辑函数

                case when 条件 then 结果1 else 结果2 end; 可以有多个when;
                ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值;
                if函数:if else的 效果 if(条件,结果1,结果2);

        ③数学函数        

                round(数值) :四舍五入;
                ceil(数值) :向上取整,返回 >= 该参数的最小整数;
                floor(数值) :向下取整,返回 <= 该参数的最大整数;
                truncate(数值, 保留小数的位数 ) :截断,小数点后截断到几位;
                mod(被除数, 除数 ) :取余,被除数为正,则为正;被除数为负,则为负;
                rand():获取随机数,返回0-1之间的小数;

          ④日期函数       

                now():返回当前系统日期+ 时间;
                curdate():返回当前系统日期,不包含时间;
                curtime():返回当前时间,不包含日期 可以获取指定的部分,年、月、日、小时、分钟、秒;
                YEAR(日期),MONTH( 日期 ),DAY( 日期 ) ,HOUR( 日期 ) ,MINUTE( 日期 ) SECOND(日期 );
                str_to_date:将日期格式的字符转换成指定格式的日期;
                date_format:将日期转换成字符串;
                datediff(big,small):返回两个日期相差的天数;

             ⑤分组函数

                功能:用作统计使用,又称为聚合函数或统计函数或组函数;
                分类:sum 求和、 avg 平均值、 max 最大值、 min 最小值、 count 计数;
                1.sum,avg 一般用于处理数值型 max min count 可以处理任何类型。
                2.以上分组函数都忽略null 值。
                3.count函数的一般使用count * )用作统计行数。
                4.和分组函数一同查询的字段要求是group by 后的字段。

               条件查询

                使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。

                语法:select <结果> from <表名> where <条件 >
                        
                模糊查询:
                        LIKE :是否匹配于一个模式 一般和通配符搭配使用,判断字符型数值 或数值型;
                        通配符: % 任意多个字符,包含0 个字符 _ 任意单个字符;
                        between and 两者之间,包含临界值;
                        in 判断某字段的值是否属于in列表中的某一项;
                        IS NULL(为空的)或 IS NOT NULL(不为空的;
          eg:SELECT * FROM student WHERE NAME LIKE '%三%'
                  SELECT * FROM student WHERE NAME LIKE '张__'

                union语法:

                UNION 
                        [SQL 语句 1]
                            UNION
                        [SQL 语句 2]
                UNION ALL 
                        [SQL 语句 1]
                         UNION ALL
                        [SQL 语句 2]
                当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all , mysql 会把所有的记录返回,且效率高于union。
                
                查询结果排序:使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc 代表的是升序, desc 代表的是降序,如果不写,默认是升序。
                
                数量限制:
                limit子句:对查询的显示结果限制数目 (sql 语句最末尾位置 )。
       eg:实现分页功能
                SELECT * FROM student LIMIT 0,4 SELECT * FROM student LIMIT 4,4
        
                分组查询:
                

       eg:         SELECT gender,COUNT(*),SUM(height) FROM student GROUP BY gender

                        SELECT birthday,COUNT(*) FROM student GROUP BY birthday

                 where 条件 对原始表中的数据进行条件筛选;

                 having 条件 对分组后的数据进行条件筛选;

        子查询 出现在其他语句中的select语句 称为子查询/内查询

                按子查询出现的为:

                        select 语句中子查询: 只支持标量查询

                        使用的较少 from 语句中子查询: 表子查询

                        where 语句中子查询:标量子查询,列子查询,行子查询

                按功能、结果集的行列数不同: 标量子查询(结果集只有一行一列)

                        列子查询(结果集只有一列多行)

                        行子查询(结果集有一行多列)(较少)        

                        表子查询(结果集一般为多行多列)

 eg:        

在select后面 使用子查询

SELECT NO,gender,(SELECT NAME FROM student st WHERE st.no = s.no ) FROM student s

在from后面使用子查询 把一个查询的结果可以当做一张表 继续作为数据源查询

SELECT * FROM (SELECT gender,COUNT(*)AS c FROM student GROUP BY gender)AS t WHERE t.c>2

在where后面使用子查询 标量子查询 -- 查询身高大于平均身高的学生 平均身高?

SELECT * FROM student WHERE height > (SELECT AVG(height) FROM student)

在where后面使用子查询 列子查询

SELECT * FROM student WHERE NO IN(SELECT NO FROM student WHERE height>1.60)

在where后面使用子查询 行子查询

SELECT * FROM student WHERE (NO,height) = (SELECT MAX(NO),MAX(height) FROM student)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值