我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。
1. 查询住址在北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
remark: beijing是一个单词,要用单引号括起来。
2. 查询住址在河北省的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province"' )
remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。
3. 查询住址在河北省或北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
remark: 可以指定逻辑 *** 作符(包括 AND ,AND NOT,OR )。
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'nanjing NEAR road' )
remark: 上面的查询将返回包含 'nanjing road','nanjing east road','nanjing west road' 等字样的地址。
A NEAR B,就表示条件: A 靠近 B。
5. 查询以 '湖' 开头的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"hu*"' )
remark: 上面的查询将返回包含 'hubei','hunan' 等字样的地址。
记住是 *,不是 %。
6. 类似加权的查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。
7. 单词的多态查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
remark: 查询将返回包含 'street','streets'等字样的地址。
对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。
以上例子都使用英文,不使用中文是因为有的查询方式中文不支持
select * from(select name as 名字,count(name)+1 as 出现次数 form 表名 where name not in(select distinct name from 表名) group by name) order by 出现次数 desc这个语句查出来的应该就是你想要的数据了。
试一下可以吗?
需要解释一下上面的SQL语句吗?
共有三个select组成。
最里面的是把不同的查出来。每个name只出现一条记录
第二层的是把重复的找出来并跟据名字分组算出每个出现的次数,加1是因为。里面层语句中占用了一个所以count在计算的时候会少一个
最外层的作用就是给重复的记录排序啦
值类型 一般情况下 不允许 为null,当然也可以设置,在设计表的时候 就应该给一个默认值,无论是 引用类型还是值类型 最好给默认值,这样你不需要写一些垃圾判断来处理这些东西。在C# 值类型 在前面打一个?号就代表它是可以为NULL。
例如
int? a=null
在属性中 public int? Age { getset}
最后还是想说一句,无论这种表结构是谁设计的,应该没必要这样设计,最好全部都有默认值,哪怕是 时间类型。 否则你后续要写一大堆垃圾无用的判断,看似高大上,其实然并卵
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)